0

.htaccessファイルの2番目のルールが最初のルールをオーバーライドするmod_rewriteの問題が発生しています。問題の.htaccessファイルは次のようになります。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/appname

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /api/v1/(.*)$ api/v1/index.php?rquest=$1 [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
</IfModule>

私が見ている問題はこれです:

http://example.com/path/appname/api/v1/valid/endpointに直接アクセスすると、最初のRewriteRuleが正しくトリガーされ、APIから結果が返されます。

ただし、http: //example.com/path/appname/appにアクセスするとします。これは、2番目のRewriteRuleに従って書き換えられたページです。このページは、api/v1ページに対してAJAXリクエストを行います。これらのリクエストは、代わりに2番目のRewriteRuleを介して送信され、ベースのindex.phpページに送信されます。

[L]フラグは、一致するとそれ以上のルールが実行されないため、「api / v1」を含むリクエストがそれをキャッチしてチェックを停止する必要があることを理解しているため、これがどのようになるかについて混乱しています。それ以上の試合のために。これを正しく機能させるには、何を変更する必要がありますか?

ありがとう!

4

1 に答える 1

0

前のルールセットのセグメントパスを除外して、再度処理されないようにする必要があります。このような:

# Don't redirect/map when folders or files exist 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Exclude the previous path
RewriteCond %{REQUEST_URI} !api/v1/?   [NC]

# Prevent loops
RewriteCond %{REQUEST_URI} !index\.php [NC]

RewriteRule . index.php                [L]

</IfModule>

質問の最後の4行を上記の行に置き換えます。

于 2013-03-13T20:02:10.857 に答える