0

私はいくつかの書き直しに取り組もうとしていますが、うまくいきません。これが私のコードです:

RewriteCond %{REQUEST_URI} !^(static/|server/|internal.php).*$
RewriteRule ^(.*)$ /internal.php?request=$1 [L]

/internal.php?request=blablablainternal.php 自体と、 static と server という 2 つのフォルダー内のものを除いて、これら 2 つのフォルダーには画像などが含まれているため、 すべてを にリダイレクトしようとしています。


/hello/world=> /internal.php?request=hello/world/
/static/a/b/c/a.jpg=>/static/a/b/c/a.jpg 変更なし

しかし、コードは機能していません。RewriteCond は internal.php と 2 つのフォルダーの書き換えを制限できないようです。今起こっていることは、すべてが internal.php に書き換えられ、internal.php が internal.php に再び書き換えられるということです。最後に、無限ループの後に 500 を返してください。私は書き直しを望まない。どうしたの?

4

1 に答える 1

0

リクエスト URI 式の先頭が欠落してい/ます。また、ドットをエスケープしてinternal.php、実際にはすべての文字ではなくドットと一致するようにする必要があります。

RewriteCond %{REQUEST_URI} !^/(static/|server/|internal\.php).*$
RewriteRule ^(.*)$ /internal.php?request=$1 [L]

これも書き直し/static/server末尾のスラッシュが省略されていることに注意してください。回避したい場合は、たとえば別の条件を追加できます。

RewriteCond %{REQUEST_URI} !^/(static|server)$
RewriteCond %{REQUEST_URI} !^/(static/|server/|internal\.php).*$

これを単一の式で表現することは可能ですが、私は正規表現の経験が少ないため、これが最もエレガントな方法ではないことは確かです。

RewriteCond %{REQUEST_URI} !^/(((static|server)(/.*)?)|(internal\.php.*))$
于 2013-08-11T18:44:16.400 に答える