2012-01-13 47 views
0

我有一個奇怪的問題。我在本地主機上開發我的網站,之後我將其分發給服務器端。大多數情況下,這是按預期工作,但現在注意到一些奇怪的東西,無法弄清楚問題所在。

在服務器上,所有RewriteRule重定向但沒有預期的查詢。這樣的事情是工作的罰款在本地主機,但不是在服務器上:

RewriteEngine敘述在 .... ....

RewriteRule ..... 

編輯:更改的條目爲安全起見,對不起!

.... ....

有誰知道這是怎麼回事?我想念什麼?爲什麼查詢不通過?它是一個服務器配置嗎?在因特網上找不到任何關於它的任何信息。

謝謝您的意見。

編輯:下面的解決方案,第二個評論。與apache首先處理什麼有關。

回答

0

這些東西幾乎不可能調試。但是mod_rewrite的提供一個功能,你應該建立調查此:

RewriteLog /tmp/rewritelog.txt 
RewriteLogLevel 2 

RewriteLog指令但是不能從.htaccess使用。您需要在虛擬主機或主服務器配置中聲明它。如果2級別仍然不足,請嘗試3

否則我只是建議你試試RewriteBase,因爲你似乎將不同的目錄級別與你的規則相匹配。可能再次在子目錄中重複您的規則(streambutler/)。 apaches mod_rewrite是獨特的,有時在父目錄中忽略它們。

+0

海,謝謝你的回覆,我明白這一點。但是,我不認爲規則本身有什麼問題,而是處理這些規則的方式。但爲什麼它如此不同呢?我會嘗試重寫基地。謝謝 – Codebeat 2012-01-14 00:02:32

+0

好吧,設置rewritebase,似乎沒關係。但問題是還有一個名爲streambutler /的目錄,服務器上的apache配置檢查第一個目錄和文件,然後重寫規則。所以對現有目錄存在混淆。本地服務器首先檢查規則,然後檢查目錄和文件。哎呀!!!!!將重寫規則中的名稱更改爲例如:streambutler/to管理員/並且它正常運行。這頭痛的東西和愚蠢的。我在哪裏可以改變查找行爲? – Codebeat 2012-01-14 00:54:18

+0

從來沒有聽說過這個。這在Apache版本中至多不同。 – mario 2012-01-14 00:56:38

1

@ Erwinus,您討論的「Perdir」功能在Apache中是標準的,但不是很好理解。 Apache將探測並打開並讀取腳本文件名路徑上現有的所有.htaccess文件。 (忽略很少選擇的RewriteOptions inherit追逐)它使用最深的.htaccess文件,它發現它具有RewriteEngine On

因此,我會不同於馬里奧的觀點,因爲恕我直言,它幾乎不可能獲得父目錄重寫規則來搶佔一個子目錄集 - Apache的默認行爲是忽略父母。我在this blog article更詳細地解釋。

+1

+1哇,非常豐富。你可以添加一個小的答案,並張貼您的鏈接http://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to - 以及? – mario 2012-01-14 14:28:50

+0

@mario,很抱歉,我最終寫了一篇文章。正如我在那裏說過的,我已經將它做成了一個個人項目,以深入瞭解mod_rewrite的工作原理,並且我仍然有一點要去。我想用我在這裏用stackoverflow思考Q的一些細微差別來修改它。我想強調一點,在.htaccess過程中使用mod_rewrite與根配置使用非常不同,幾乎需要給出它自己的單獨處理。 – TerryE 2012-01-14 16:59:57

+0

很酷。非常感謝!這也是Serverfault的參考答案,所以專家知識越多越好。 PerDir是我上週偶然發現的事情。 (更有意思的是,我曾經爲一個基於PHP的web服務器編寫了'mod_rewrite'重新實現,但是從來沒有涉及到這麼多內在細節。) – mario 2012-01-14 17:19:05

相關問題