今天,我寫了下面的重寫規則:改寫服務器之間的差異怪異
RewriteCond %{HTTP_HOST} ^visionale\.book [NC]
RewriteRule ^\/([^/]+)\/$ $1.php [L]
RewriteCond %{HTTP_HOST} ^(www\.)?visionale\.se [NC]
RewriteRule ^(.*)/$ $1.php
的冷杉是我的筆記本電腦,我運行Apache,對於網上的酒店第二條規則。
應用在網絡上搜索結果第一改寫在404未找到
應用在我的筆記本神祕地導致「pagename.php.php.php」第二條規則沒有找到。
現在我提供的解決方案可以在兩個地方工作,但我對真正發生的事情感到困惑。我的本地機器運行Apache 2.4.6。網絡酒店運行Litespeed。所以這當然是不相容的,但究竟是如何。
我的猜測是Litespeed由於缺少功能而錯過了第一條規則,但爲什麼Apache沒有獲得更容易的規則,我過去曾多次使用過?
編輯:澄清問題。
這條規則:
RewriteRule ^\/([^/]+)\/$ $1.php [L]
是不是撿到我的網絡運行酒店的Litespeed。我的猜測是,這是因爲Litespeed有一個有缺陷的重寫實現。我希望得到確認的預感或其他解釋。
這條規則:
RewriteRule ^(.*)/$ $1.php
不我開發機更多上工作,但它在過去工作過。這似乎很簡單。任何以斜線結尾的內容都應該得到一個「.php」擴展名。但是,在我的開發機器上,它增加了三個「.php」而不是一個。該規則在網絡酒店中按照預期工作,過去它在本地爲我工作。這令人費解,我想要一個解釋。
兩個'RewriteCond'中使用的模式不同,所以你如何比較它們?你的問題不是很清楚,你能否請進一步解釋? –
是的,他們在技術上有所不同,但他們取得了相同的結果。 foo /被重寫爲foo.php。 – itpastorn
對於您的開發機器上的問題,請啓用重寫日誌 - 然後您可以準確回溯該規則的處理方式。 – CBroe