

さくらインターネットのレンタルサーバを使用しています。
ドメインの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]
リライトの設定しかしていないのに、なぜリダイレクトされてしまうのでしょうか?
仕様なのでしょうか?
No.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も上げておくと手がかり見つかるかもしれませんね。
解決しました。
ありがとうございます。
> .htaccess は下位ディレクトリから参照されるそうなので、まずこれが走る。
ご指摘の通りです。
.htaccess の実行される順番を勘違いしていました。
> RewriteRule ^/item/([0-9]+)\.html$ /item.php?id=$1 [L]
RewriteRule ^item/([0-9]+)\.html$ /item.php?id=$1 [L]
先頭の/は不要でしたが、思った通りの動作をしてくれました。
助かりました。
ありがとうございます。
No.1
- 回答日時:
ドキュメントルートの.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 へ。
設定されている通りだと思いますが?
> そのごitemフォルダ内の.htaccessにより www.domain.com/item/123.html は www.domain.com/item.php?id=123 へ。
itemフォルダ内の.htaccess には[R]を付けていません。
リダイレクトを望んでいません。
[R]を付けていないのにリダイレクトされてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
includeでHTMLファイルを呼出し...
-
htmlで自分自身を呼び出して整...
-
phpのheader("Location:#pos")...
-
*.php、*.php3、*.phtmlの違い
-
phpのextension_dirを複数指定...
-
PHP PDOライブラリが読み込まれ...
-
phpでメール送信できません 原...
-
header(Location:~)で$_SESS...
-
<A href ~ と一緒に値を渡すには
-
さくらインターネットでメール...
-
【PHP】tmp_nameの命名規約につ...
-
php4とphp5での数値の取り扱い...
-
テレメールとは?
-
PHPでメールを受信するには?
-
データ送信をボタンを押さずに...
-
PEAR(Image_QRCode)のエラー
-
Apache 2.4でphp-5.3を使いたい...
-
セッションについての設定なの...
-
require_once()でファイルが読...
-
HTML文をなんとか隠蔽したいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
centos6のlogにscript not foun...
-
includeでHTMLファイルを呼出し...
-
htmlで自分自身を呼び出して整...
-
階層が違う場合の絶対パス相対...
-
phpの階層が変わると上手く読み...
-
正規表現を使い、URLで条件分岐...
-
携帯でhtmlが見えない
-
PHP file_get_contents 503 ser...
-
includeにより他の部分が表示さ...
-
ZendFrameWorkで、.htaccessを...
-
PHPをHTMLで出力したい。
-
SSI される .inc ファイル内に ...
-
「旭日中綬賞 」とはどんな賞で...
-
埼玉の長浜ラーメン店教えてく...
-
PHPとshtmlのhtml化共存方法を...
-
PHPって?
-
ワードプレスを使っていて、エ...
-
PHPを使用したパンくずリストに...
-
拡張子PHP3のスクリプトを...
-
phpのheader("Location:#pos")...
おすすめ情報