2012-01-17 22 views
4

相同的名稱失敗我一直有一個重寫規則有點麻煩,谷歌搜索後,導致我無處。我有一個URL設置的這樣一個標準的改寫:.htaccess重寫 - 如果文件存在與參數

RewriteRule ^services/(.*)/ /services/index.php?content=$1 [L] 

該網站使用的content值請求從DB的相關內容,但只是使URL看起來更漂亮;標準的東西。這在一定程度上起作用。例如,如果我的網址是我們的/services/testimonials/該規則正常工作;內容被加載並且頁面正常顯示。我與一些網址,但看到(如/services/training/)是一個錯誤,指出:

Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0 Fatal error: Unknown: Failed opening required 'redirect:/services/index.php' (include_path='[removed]') in Unknown on line 0 

經過大量谷歌搜索和撞頭(同來自進展甚微),我發現,如果我改變的URL /services/Training/(注意大寫T)它工作。這很快讓我想到了一些URL中的衝突(我可能應該首先想到事後想到的)。在檢查了哪些URL已經工作,哪些沒有工作之後,我將點連接起來,發現被破壞的URL在子目錄中具有與URL相同的名稱。這句話令人困惑。基本上我不能使用URL /services/training/,因爲有一個文件/services/training.php導致錯誤的返回。

對此有一個明顯的解決方法,即重命名與URL衝突的文件,但是在重寫規則中,我可以忽略它可能找到的同名文件的任何文件嗎?

+2

也許[this](http://stackoverflow.com/questions/7722846)會幫助你嗎?正如在該問題中接受的答案所述,'0行'通常表示服務器配置錯誤,因爲在PHP開始執行腳本之前,您從PHP獲取錯誤。請注意,您正在獲取PHP錯誤,而不是Apache錯誤,這表明PHP正在被Apache激發。 – DaveRandom 2012-01-17 10:29:07

+0

感謝@DaveRandom,解決的問題與我所遇到的問題略有不同,雖然它是一個PHP錯誤是有道理的。 – 2012-01-17 10:45:39

+0

您是否嘗試過重定向而不將前面的路徑附加爲變量?你可以在$ _SERVER ['REDIRECT_URL']'中讀取它。 – Ranty 2012-01-17 13:25:37

回答

5
Options -MultiViews 

這應該防止URL映射到training.php。但它不會阻止/services/training.php未映射,但這不會成爲我所假設的問題。

+0

最簡單的答案總是最好的。謝謝@Gerben – 2012-01-18 10:22:34

+1

+1我不敢相信我已經忘記了這一點。幾年前,爲了這個原因,我花了一段時間纔開始使用'mod_rewrite'。 – 2012-01-18 15:13:05

+0

@ÁlvaroG.Vicario有趣的是,我發佈了這一行代碼作爲問題的解決方案。 – Gerben 2012-01-18 16:39:49