0

そこの、

これは知っている人にとっては簡単な作業ですが、私はApacheの書き換えに慣れていないので、ご容赦ください。私は2つの書き換え条件を作成し、それらは機能します。私は3番目を書く必要があります-他のすべてがindex.phpファイルに行くように。問題は、3番目のルールを追加すると、最初の2つにもかかわらず常に適用されるということです。

RewriteEngine On 
RewriteRule   ^new/?$   new.php  [NC,L]
RewriteRule   ^thanks(.*)$ thankyou.php [NC,L]
RewriteRule   ^(.*)$ index.php 

手伝ってくれてありがとう。

4

1 に答える 1

1

答えは、RewriteRuleディレクティブで使用されるLフラグに関する次の段落にあると思います。

.htaccessファイルまたはセクションでRewriteRuleを使用している場合は、ルールがどのように処理されるかをある程度理解しておくことが重要です。これの単純化された形式は、ルールが処理されると、書き換えられた要求がURL解析エンジンに戻され、それを使用して実行できるようにすることです。書き換えられた要求が処理されるときに、.htaccessファイルまたはセクションが再度検出される可能性があります。そのため、ルールセットが最初から再実行される可能性があります。最も一般的には、これは、ルールの1つがリダイレクト(内部または外部)を引き起こし、要求プロセスを最初からやり直す場合に発生します。

リライトが実行された後、どういうわけか制御がURL解析エンジンに戻され、ルールが再度実行されるということが起こると思います。

最後のルールにいくつかの書き換え条件を追加することで、この動作を防ぐことができます。

<IfModule mod_rewrite.c>

RewriteEngine On 

RewriteRule new/?$ new.php [NC,L]
RewriteRule thanks(.*)$ thankyou.php [NC,L]

# Only rewrite to index.php if the current request is not for an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

</IfModule>
于 2013-02-18T22:40:37.063 に答える