2011-05-01 151 views
0

我有以下重寫設置:的RewriteCond混亂

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteRule ^api/?.*$ api.php [NC,L] 

RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteRule ^.*$ web.php [L] 

我要的是對非文件和目錄由api.php或web.php(其做自己的路由)被捕獲,並休息以返回文件或目錄。然而,主路由'/',看到mod_rewrite爲''不會被捕獲 - 我想這是因爲/是一個目錄 - 根。

我該如何解決這個問題,讓它通過web.php,同時保持目錄可訪問?

回答

0

語法:RewriteBase URL路徑

URL路徑可以是根相對路徑或空的。空的URL路徑值意味着規則庫將等於網站根。

1

首先,您需要將規則中的REQUEST_URI更改爲REQUEST_FILENAME。請參閱http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

REQUEST_URI: 請求的資源中的HTTP請求行。

REQUEST_FILENAME:完整的本地 文件系統路徑到文件或腳本 與請求匹配。

然後,添加另一條規則:

RewriteCond %{REQUEST_URI}/
RewriteRule .* web.php [L] 

所以最終的結果將是:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^api/?.*$ api.php [NC,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)? web.php [NC,L] 

RewriteCond %{REQUEST_URI}/
RewriteRule .* web.php [L]