我遇到了一個mod_rewrite問題,我的.htaccess文件中的第二條規則覆蓋了第一條規則。有問題的.htaccess文件看起來像下面這樣:mod_rewrite覆蓋第二個RewriteRule
<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第一重寫規則正確觸發和我得到的結果返回來自API。
但是,假設我訪問http://example.com/path/appname/app - 根據第二個RewriteRule重寫的頁面。此頁面向api/v1頁面發出AJAX請求。這些請求是直接通過第二個RewriteRule併發送到我的base index.php頁面。
我很困惑這可能是什麼,因爲我的理解是,[L]標誌防止任何進一步的規則一旦匹配就運行,因此一旦有任何'api/v1'的請求應該捕獲並停止檢查任何進一步的比賽。爲了正確工作,我需要更改哪些內容?
謝謝!
這意味着第一個不匹配。檢查js訪問的控制檯中的確切URL,或啓用「RewriteLog」。 – Wrikken 2013-03-13 19:30:00