2011-04-25 97 views
0

我正在使用安裝在Win7機器上的C:上的Zend Server CE(v.5.1.0)。.htaccess RewriteRule添加到URL的驅動器路徑

Alias /project "D:\Homepages\project" 
<Directory "D:\Homepages\project"> 
    Options Indexes FollowSymLinks 
    AllowOverride all 
    Order allow,deny 
    Allow from all 
</Directory> 

的.htaccess文件項目目錄包含以下內容::我通過添加添加一個項目的httpd.conf

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_URI} ^/\w*\.(css|js) [NC] 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

我們的問題;如果我去

http://localhost/project/index.php

一切似乎是工作的罰款。我到達index.php文件並獲取我的內容。 但是,如果我去任何其他頁面,將觸發RewriteRule,它似乎是添加目錄路徑。火狐輸出以下未找到消息:

請求的URL /Homepages/project/index.php此服務器上找到。

我試着在這裏找到類似的問題/答案,但失敗了。任何想法? Ps。我接受一個答案可能會被延遲,因爲我將會出差一段時間。

+0

對不起,我的第一篇文章說一切順利http:// localhost/project。此情況並非如此。當直接進入http://localhost/project/index.php時,它很好。 – ANisus 2011-04-25 13:23:02

回答

2

有你的最後一行是這樣的:

RewriteRule ^.*$ /index.php [NC,L] 

不過,我覺得這是無限循環,所以我建議這個規則來代替:

RewriteCond %{THE_REQUEST} !\s/index.php [NC] 
RewriteCond %{REQUEST_URI} !^/index.php [NC] 
RewriteRule . /index.php [L] 

這樣可防止去的index.php如果是已經是/index.php。

+0

感謝您的回答!但它不適合我。您的解決方案似乎重定向到http://localhost/index.php而不是http://localhost/project/index.php。當然,我可以把它改成RewriteRule。 /項目/指標。php [L],但我不想將路徑硬編碼到.htaccess文件中 – ANisus 2011-04-25 15:51:33

+0

一旦您確認答案適合您,請將答案標記爲已接受。 – anubhava 2011-04-25 15:53:28

+0

我會..(對不起,評論完成之前的帖子) – ANisus 2011-04-25 15:54:20

5

您需要設置RewriteBase指令;否則,將自動使用mod_rewrite,並且默認情況下會將文件路徑預加重到生成的重寫規則。

來自:​​

當取代發生於一個新的URL,該模塊具有與URL到服務器處理中重新注入。爲了能夠做到這一點,它需要知道相應的URL前綴或URL基礎是什麼。默認情況下,這個前綴是相應的文件路徑本身。但是,對於大多數網站來說,URL並不直接與物理文件名路徑相關,所以這種假設通常是錯誤的!因此,您可以使用RewriteBase指令來指定正確的URL前綴。 如果您的網絡服務器的URL與物理文件路徑沒有直接關係,您需要在每個想要使用RewriteRule指令的.htaccess文件中使用RewriteBase。