0

apache(mod書き換え)で以下のことをしたいです。

  1. ユーザーがhttp://hostname.tld/index.php/folder/subfolderを要求した場合、 (R=301 で) http://hostname.tld/folder/subfolderにリダイレクトします。

  2. ユーザーがhttp://hostname.tld/folder/subfolderをリクエストした場合、リクエストは内部で index.php/folder/subfolder に書き換えられる必要があります。

エンドレス リダイレクトを防ぐには、最初のルールで %{THE_REQUEST} を確認する必要があります。ここでの問題は、「フォルダー/サブフォルダー」に正規表現を追加できないことです。どうすればいいですか?

2番目のルールについては、これがあります(そしてうまくいくようです)。

RewriteCond %{HTTP_HOST} hostname.tld [NC]
RewriteRule ^(.*)$ index.php [QSA,L]

最初のものはまだ問題です。

最初のものは次のようなものであるべきだと思います

RewriteCond %{THE_REQUEST} (.*)index.php(.*) [NC]
RewriteRule /index.php/$ http://hostname.tld/$1 [R=301,QSA,L]

しかし、それだけではありません。

4

1 に答える 1

0

最初はする必要があります。

RewriteCond %{HTTP_HOST} ^hostname\.tld$ [NC]
RewriteCond %{THE_REQUEST} index\.php [NC]
RewriteRule ^index.php/(.*)$ http://hostname.tld/$1 [R=301,L]

http://hostname.tld/folder/subfolderまた、2番目のルールが http://hostname.tld/index.php(ではなく)にリダイレクトされていることもわかります http://hostname.tld/index.php/folder/subfolder。しかし、それが機能する限り、それは問題ありません。これにより、リダイレクトループも防止されます。ただし、念のため、フォルダ/サブフォルダの部分を追加するための解決策は次のとおりです。

RewriteCond %{HTTP_HOST} ^hostname\.tld$ [NC]
RewriteCond $1 !^index\.php
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
于 2012-05-11T16:17:01.530 に答える