2

[L]でフラグを使用しようとしていますRewriteRuleが、機能していないようです。ページを呼び出していただければ幸いです。

www.domain.com/admin/

次の場所にリダイレクトされます。

www.domain.com/backend.php

それ以外の場合、他のページ (一部のページを除く) を呼び出すと、次のページにリダイレクトされます。

www.domain.com/index.php

これが私がこれまでに持っているものです:

RewriteEngine on

RewriteRule ^admin/(.*) /backend.php/$1 [L]

RewriteCond $1 !^(index\.php|admin|assets|images|uploads|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

最初のルールのみを使用すると、機能します (ただし、他のページを index.php にリダイレクトしないことは明らかです)。[L]2番目のルールを追加すると、サーバーは最初のルールを無視するようです(フラグを追加しても、2番目のルールによって「上書き」されていると思います)

4

2 に答える 2

2

これはうまくいきませんL。書き換えエンジンは、エンジンに入る URI が出力される URI と同じになるまで、すべてのルールを継続的にループします。は、現在のループ反復でLルールの適用を停止するように書き換えエンジンに指示するだけです。だからあなたが持っているとしましょう:

RewriteRule ^(.*)$ /foo/$1 [L]
RewriteRule ^(.*)$ /bar/$1 [L]

URI を指定して 1 回繰り返した後、最初のルールの後で書き換えが停止するため/blah取得/foo/blahします (ただし、ループは続行されます)。を削除するとL:

RewriteRule ^(.*)$ /foo/$1
RewriteRule ^(.*)$ /bar/$1

URI を指定すると、1 回繰り返した後/blah、 が得られ/bar/foo/blahます。両方のルールが次々に適用されLます。これは、それを止めるものがないためです。

最初のルールを書き換えないようにするには、2 番目のルールに条件を追加する必要があります。次のいずれかで実行できます。

RewriteCond $1 !^(backend\.php|index\.php|admin|assets|images|uploads|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

また:

RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond $1 !^(index\.php|admin|assets|images|uploads|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
于 2012-09-07T14:40:25.777 に答える
0

あなたの 2 番目の規則は奇妙です。$1条件をチェックしている値として何をしようとしているのかわかりません。おそらく次のようになります。

RewriteEngine on

RewriteRule ^admin/(.*) /backend.php/$1 [L]

RewriteCond %{REQUEST_FILENAME} !^(index\.php|admin|assets|images|uploads|robots\.txt|backend\.php)
RewriteRule ^(.*)$ /index.php/$1 [L]

パススルーも追加したことに注意してくださいbackend.php

于 2012-09-07T14:28:28.350 に答える