.htaccess には下記の様に書いてあります。
-------------------------
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?.+ /index.php
-------------------------
http://www.hoge.com/a%2Fb%2Fc
という様な「%2F」(/)の入ったURLへのアクセスも、
/index.php にリダイレクトしたいのですが、下記の様になってしまいます。
-------------------------
Not Found
The requested URL /a/b/c
-------------------------
解決方法を教えて下さい。
宜しくお願い致します。
『「%2F」(/)の入ったURLへのアクセスも、』というところを、素直にふたつ目のルールとして書く、というのではどうでしょうか。
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/?.+ /index.php [L] RewriteCond %{REQUEST_URI} %2F [NC] RewriteRule ^/?.+ /index.php [L]
「存在しないファイルやディレクトリだったら」の方は、RewriteRule に L フラグを指定して、条件を満たした場合にはそこで止めるようにします。
HTML のエスケープでも、Apache の場合は %2F の扱いが特別だということが分かって、ぼくも勉強になりました。
2016/08/09 00:31:41Rewrite Module のログを見ると、ある程度は挙動が分かります(今回のは分かりませんでしたが)。
2.2 までなら、 RewriteLog と RewriteLogLevel で、2.4 なら LogLevel で出力内容を制御できます。
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
ありがとうございます。
2016/08/12 23:58:26