「mod_rewrite」で、「.htaccess」と「httpd.conf」の違い
「mod_rewrite」を利用して、http://example.com/test.do;jsessionid=xxxx?id=1234&uid=5678&name=test のようなURLで、test.doへのアクセスでパラメータにuid=xxxxが含む場合は、uidのパラメータを削除したURLを渡すようにしたいので、下記のような「.htaccess」を作成してテストすると、問題なく、http://example.com/test.do;jsessionid=xxxx?id=1234&name=test となります。
これをApache側の「httpd.com」の設定すると、何度やっても uid=xxxxが削除されません
# [.htaccess] RewriteEngine on RewriteCond %{QUERY_STRING} ^(.&)?uid=[^&]&?(.*)?$ RewriteRule ^(test.do.*) $1?%1%2 [R=301,NE,L]
色々と調べると、「.htaccess」と「httpd.conf」では、「RewriteRule」でURLにアクセスした場合の渡されるファイル名(test.php)の「/」の有無がかわってきます。
- 「.htaccess」・・・RewriteRule では、「test.php」が渡される
- 「httpd.conf」・・・RewriteRule では、「/test.php」が渡される
「httpd.conf」では、「/」が渡されるので、下記のように設定すれば「/」を含むようにすれば、意図した動作になりました
# [httpd.conf] RewriteEngine On RewriteCond %{QUERY_STRING} ^(.*&)?mid=[^&]*&?(.*)?$ RewriteRule ^/(test.do.*) $1?%1%2 [R=301,NE,L]
ディスカッション
コメント一覧
まだ、コメントがありません