「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]

 

 

 

スポンサーリンク

0
0

LinuxApache,CentOS 6,CentOS 7

Posted by admin