.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 フラグを指定して、条件を満たした場合にはそこで止めるようにします。
え?…
# RewriteCond %{REQUEST_FILENAME} !-f ←ファイルが存在しない場合に実行
# RewriteCond %{REQUEST_FILENAME} !-d ←ディレクトリが存在しない場合に実行
という事を指定されていたので404関連の記述かと思ったのですが^^;
.htaccess、トップ以外のアクセスをトップにリダイレクトする方法
http://highmoon-miyabi.main.jp/blog/2013/05/31_000339.html
というそのものずばりのページがありましたのでご報告致します。
ErrorDocument 404 /index.php
を付け加えることで事足りるような気がしないでもないです。
http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/redirect.html
「そのものずばりのページ」は、いくつかの理由(*)で話 1/4 くらいで読んでおけば良いような感じですが、404 のページを index.php にするというのは、質問の目的にかなってそうな気がします。
(*) (ぼくが)真剣に読む気にならない、いくつかの理由
- 基本的なところで、正規表現が分かってない
- 「いろいろとやってみた」と書いてあって、具体例がない
→ こういう表現は、試行回数は多いのかもしれないが、行き当たりばったりなので、同じようなことを繰り返しているだけだということが多い
- ログを見ない人(少なくとも、ループしてる理由は一発で分かる)
- 多分、マニュアルも見ない人
以前ほど時間が割けないので、ほどほどに出現する感じになろうかと思います。
ダメでした...。
> ErrorDocument 404 /index.php
そういえば、昔、どんなURLだろうとindex.php で処理したいときに
これを自分のサイトでやっておりましたので、
そうだ、これで解決だ!、、、と喜んで追記しましたが、結果は変わりませんでした。ーー;;
「%2F」を含んでいないURLは全てindex.phpに行きますが、
含んでいると、変わらず「404 Not Found」でした。
どこに書いても同じでした。
> # RewriteCond %{REQUEST_FILENAME} !-f ←ファイルが存在しない場合に実行
> # RewriteCond %{REQUEST_FILENAME} !-d ←ディレクトリが存在しない場合に実行
はい、条件通り、存在しないURLは全て index.php にリダイレクトしています。
URLを動的に生成しているサイトでして、
一部のURLはそのURLで処理しているので、存在しない場合は、としております。
全部index.phpに飛ばして、存在しないはずのURLを指定された場合は
404を表示する様にしております。
ありがとうございました。