1

私の public_html の .htaccess ファイルには次のものがあります。

RewriteEngine on
RewriteRule ^testfolder/(.*)$ /$1 [R=301,L,NC]
RewriteRule ^(.*)$ testfolder/$1

出力のテストに使用しているhttp://htaccess.madewithlove.be/によると

http://www.mydomain.com/testfolder/aaa/bbbと入力すると、次のようになります。

This rule was met, the new url is http://www.mydomain.com/aaa/bbb
Test are stopped, because of the R in your RewriteRule options. A redirect will be made with status code 301

301 リダイレクトを実行してブラウザ バーの URL を「きれい」にする方法はありますか?

私の codeigniter プロジェクトは www.mydomain.com/testfolder にあります。私の最初のルール:

RewriteRule ^testfolder/(.*)$ /$1 [R=301,L,NC] 

www.mydomain.com/testfolder/controller/method から www.mydomain.com/testfolder/controller/method. 2 番目のルールは、誰でも www.mydomain.com/controller/method を使用できるようにするためのもので、内部的には www.mydomain.com/testfolder/controller/method に変換されます。

前もって感謝します、

明細書

補遺 - 私の現在の .htaccess ファイル:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+b1/(.*)\s [NC]
RewriteRule ^ /$1 [R=302,L]

RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(.*)$ /b1/$1 [L]
4

2 に答える 2

2

まず第一に、ルールに欠陥があり、間違いなく無限ループが発生します。

理由は、最初のルールが外部から にリダイレクトされている/testfolder/aaa/bbbため/aaa/bbbです。

リダイレクト後、2 番目のルールも有効になります。これは、.*そこに一致するだけであり、内部的に転送されるためです。/testfolder/aaa/bbb/そのルールにより、1 番目のルールが再び有効になり、無限ループが発生します。

意図はわかりませんが、このコードを使用してループを回避できます。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+b1/([^\s]+)\s [NC]
RewriteRule ^ /$1 [R=302,L]

RewriteRule ^(.*)$ /b1/$1 [L,P]

正常に動作していることを確認したら、 に置き換えR=302ますR=301R=301mod_rewrite ルールをテストしている間は (Permanent Redirect) を使用しないでください。

于 2013-06-03T01:57:54.183 に答える