2016-01-07 44 views
1

我在一個目錄中使用一個簡單的.htaccess文件將所有請求從該目錄重定向到同一目錄內的腳本,但相對路徑不工作,我必須使用RewriteBase否則它將無法工作。mod_rewrite相對路徑不起作用。需要RewriteBase

這裏是我的設置,

目錄佈局:

/ (web root) 
|- index.html 
|- hooks 
    |- .htaccess 
    |- server.py 

當我做出http://example.com/hooks/foo請求我希望它改寫爲http://example.com/hooks/server.py/foo

因此,這裏是我的.htaccess

RewriteEngine On 
RewriteBase /hooks/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ server.py/$1 [L,QSA] 

上述工作很好。但如果我刪除RewriteBase /hooks/行,它不會。

什麼給?它不應該默認爲相對路徑嗎?我的主機上有配置問題嗎?有什麼方法可以調試嗎?

+0

當您刪除'RewriteBase',它會重寫的網址是:'http://example.com/hooks/foo/server.py/foo ' – hjpotter92

+0

當'RewriteBase'被註釋掉時,你是否得到404用於'http:// example.com/hooks/foo'? – anubhava

+0

@ hjpotter92哦,這是有道理的! 但是爲什麼呢?如果foo不是一個有效的目錄 – Skinner927

回答

1

如果刪除RewriteBase:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ server.py/$1 [L,QSA] 

所以http://example.com/hooks/foo將請求鏈接 http://example.com/hooks/server.py/hooks/foo

我想這就是爲什麼你得到了一個404錯誤的原因。

如何對這條規則:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^hooks/(.*)$ server.py/$1 [L,QSA] 
+0

這是寫同樣的東西的另一種方式。我試圖刪除指定當前目錄的需要。 – Skinner927