1

Apacheの書き換えルールに少し問題があります

これが私のルールです

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteRule query/(.*) /php/query.php?name=$1 [L]
RewriteRule page/(.*) /php/page.php?page=$1 [L]

それは完全に機能します。しかし、次のルールを追加して、前の 2 つのルールに一致しない URL を書き換えようとすると、

RewriteRule .* /php/page.php?page=home

サーバーは「内部サーバー エラー」を返します。なんで ?

4

2 に答える 2

4

を使用RewriteLogして何が起こったかを[L]確認できますが、 を使用しても、書き換えられた URL が一連のルールで常に再チェックされることを確認できます (これは内部リダイレクトの呼び出しです)。

RewriteCondしたがって、この最後のキャッチオールの前にいくつか追加するか、次のように内部リダイレクトで実行されないようにします。

RewriteCond %{ENV:REDIRECT_STATUS} ^$

最終的なキャッチオールに[NS]orタグを追加することもできます。これは同じことを行います。[nosubreq]

ただし、内部リダイレクトに関するルールを禁止するということは、以前のルールの後に適用されることは決してないということでもあり、いつの日かそれが必要になるかもしれません。したがって、次のルールには注意してください。

于 2013-11-06T10:59:39.427 に答える
0

ありがとう !

最後に、これが私の解決策です:

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteRule query/(.*) /php/query.php?name=$1 [L]
RewriteRule page/(.*) /php/page.php?page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ page/home [L,R]
RewriteRule ^$ page/home [NS,R]
于 2013-11-06T11:28:45.750 に答える