2012-10-20 19 views
2

這是我的第一篇文章,所以對我來說很容易。如何使用.htaccess重寫到具有php標題重定向的頁面?

基本上我在做我的htaccess的文件來改變我的由搜索友好的網址爲實際的URL某些重寫,並且在大多數情況下,他們正在努力。比如這個:

http://www.negativeworld.org/7849/news/nintendo-download-for-may-24-2012

會變成這樣:

http://www.negativeworld.org/article.php?id=7849

就好了... ...如果該文章存在。如果文章不存在,php代碼將使用:

header("Location: boarderror.php"); 
exit; 

將用戶帶到boarderror.php。這工作得很好,如果它直接在article.php那裏得到那個用戶並且id很糟糕,但是當我試圖從一個搜索友好的url做這個htaccess重定向並且這個id很糟糕的時候,htaccess重定向只會在給出之前掛起一段時間我這個消息:「該頁面沒有正確重定向」。

我想要的是它去我boarderror.php網頁時,有一個不好的ID。所以基本上我希望我的htaccess頁面能夠使用服務器友好的URL,切換到真正的URL,以及......在這一點上放手,PHP將從那裏開始。這是我的htaccess線,開關:

RewriteRule ^([0-9]+)/(news|review|editorial|podcast)/(.*)$ /article.php?id=$1 [L] 

我做錯了什麼? (順便說一句我知道,假如我去了我所有的搜索友好的URL的正確永遠不應該有一個壞的ID無論如何,但我想在安全方面...)

+0

你能定義壞ID嗎?因爲如果你談論的是ID不在你的數據庫中,你可以使用PHP來處理這個問題。只是一個參考,總是使用絕對路徑爲您的CSS,圖像和JavaScript。搜索友好的網址無法找到css文件atm –

回答

1

你的想法並沒有錯。對於錯誤的ID,可以使用雙重重定向。問題在於第二次重定向是如何發生的。嘗試

header("Location: http://www.negativeworld.org/boarderror.php"); 

header("Location: /boarderror.php"); 

與您重定向瀏覽器試圖http://www.negativeworld.org/9999/news/boarderror.php(即9999錯誤的ID)在一個無限循環的重定向落在瀏覽器削減10次嘗試後。

+0

工作,謝謝你們! –

0

重定向規則是好的,問題在你的頭函數調用中。當你只提供文件名時,標題重定向會將用戶發送到同一文件夾中的文件,就像僅使用文件名創建html鏈接一樣。

比方說,我嘗試加載http://www.negativeworld.org/99999/news/nintendo-download-for-may-24-2012該ID是無效的。在這種情況下,它會發送用戶到http://www.negativeworld.org/99999/news/boarderror.php,這會再次觸發重定向,並陷入無限循環(或者,如果瀏覽器不夠聰明,無法停止請求相同的URL一遍又一遍)。

RFC 2616位置頭部應該提供一個絕對URI,所以你應該做這樣的事情:

header("Location: http://www.negativeworld.org/boarderror.php"); 
exit; 
相關問題