電子書籍の厳選無料作品が豊富!

さくらインターネットのレンタルサーバを使用しています。
ドメインのwwwの有り無しを統一したかったので、.htaccessに以下のように設定しました。

<.htaccess>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ h ttp://www.domain.com/$1 [R=301,L]


検証してみると、

domain.com/item/123.html
domain.com/item/456.html

www.domain.com/item/123.html
www.domain.com/item/456.html

上記のようにリダイレクトされるのを期待していたのですが、
以下のような動作をします。

domain.com/item/123.html
domain.com/item/456.html

www.domain.com/item.php?id=123
www.domain.com/item.php?id=456


itemフォルダ内の.htaccessでリライトの設定をしているので、それが動いているのだと思うのですが、
リライトの設定をしているだけであって、リダイレクトの設定はしていません。

<itemフォルダ内の.htaccess>
RewriteRule ^([0-9]+)\.html$ /item.php?id=$1 [L]

リライトの設定しかしていないのに、なぜリダイレクトされてしまうのでしょうか?
仕様なのでしょうか?

A 回答 (2件)

>[R]を付けていないのにリダイレクトされてしまいます。



あ、そういうことですか。
よくわからないけど、もしかしたら、

1)domain.com/item/123.html → domain.com/item.php?id=123 にリライトされる
.htaccess は下位ディレクトリから参照されるそうなので、まずこれが走る。このときにwww無しをwww付きに変更する記述はないので、内部的にdomain.com/item.php?id=123 にリライトされる。

2)domain.com/item.php?id=123 → www.domain.com/item.php?id=123 にリダイレクトされる
内部的なアクセスがwww付きに「リダイレクト」される。

ということなのではないですかね。
ドキュメントルートの.htaccess に

RewriteRule ^/item/([0-9]+)\.html$ /item.php?id=$1 [L]

を追加してみるとどうなりますかね。
RewriteLogLevelも上げておくと手がかり見つかるかもしれませんね。
    • good
    • 0
この回答へのお礼

解決しました。
ありがとうございます。

> .htaccess は下位ディレクトリから参照されるそうなので、まずこれが走る。

ご指摘の通りです。
.htaccess の実行される順番を勘違いしていました。

> RewriteRule ^/item/([0-9]+)\.html$ /item.php?id=$1 [L]

RewriteRule ^item/([0-9]+)\.html$ /item.php?id=$1 [L]
先頭の/は不要でしたが、思った通りの動作をしてくれました。

助かりました。
ありがとうございます。

お礼日時:2017/02/24 18:44

ドキュメントルートの.htaccessにより、domain.com/item/123.html は www.domain.com/item/123.html へ。


そのごitemフォルダ内の.htaccessにより www.domain.com/item/123.html は www.domain.com/item.php?id=123 へ。

設定されている通りだと思いますが?
    • good
    • 0
この回答へのお礼

> そのごitemフォルダ内の.htaccessにより www.domain.com/item/123.html は www.domain.com/item.php?id=123 へ。

itemフォルダ内の.htaccess には[R]を付けていません。
リダイレクトを望んでいません。
[R]を付けていないのにリダイレクトされてしまいます。

お礼日時:2017/02/24 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!