2015-05-06 65 views
1

我試圖重寫URL的mod_rewrite:URL改寫爲指向CGI腳本,但要重寫隱藏

http://domain.com/whatever 

要:

http://domain.com/cgi-bin/script.cgi 

我的.htaccess文件看起來是這樣的:

RewriteEngine On 
RewriteRule /whatever /cgi-bin/script.cgi [NC] 

這不起作用,並給我一個404錯誤。然而,這個工程:

RewriteEngine On 
RewriteRule /whatever http://domain.com/cgi-bin/script.cgi [NC] 

但在這種情況下,URL變化vivible給用戶。我究竟做錯了什麼?

+0

你有其他規則嗎?此外,重寫規則的模式沒有前導斜槓(用於匹配的URI已刪除前導斜線) –

+0

沒有其他規則。這些是.htaccess文件的完整內容。我不確定你的意思是什麼,但第二個例子可以執行重定向,所以我不相信這是模式的問題... – Bintz

+0

編輯:沒關係,我錯了。 – Bintz

回答

2

加入[PT]標誌固定它:

RewriteEngine On 
RewriteRule /whatever /cgi-bin/script.cgi [NC,PT] 

現在,如果有人可以只解釋了爲什麼多數民衆贊成需要的,什麼是真正回事,我將非常感謝。

+1

'passthrough | PT' - 強制將生成的URI傳遞迴URL映射引擎,以處理其他URI到文件名轉換器(例如Alias或Redirect)。默認情況下,RewriteRule中的目標(或替換字符串)被假定爲文件路徑。使用[PT]標誌會導致它被視爲一個URI。也就是說,使用[PT]標誌會導致RewriteRule的結果通過URL映射傳回,因此基於位置的映射(例如Alias,Redirect或ScriptAlias)可能有機會生效。 –

+0

例如,如果您有一個用於/圖標的別名,並且有一個RewriteRule指向那裏,則應該使用[PT]標誌來確保對別名進行評估。在這種情況下忽略[PT]標誌將導致別名被忽略,導致返回'File not found'錯誤。 –

+0

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_pt –