簡體   English   中英

如何使用.htaccess重寫到具有php標頭重定向的頁面?

[英]How can I use a .htaccess rewrite to a page that has a php header redirect?

這是我的第一篇文章,所以對我輕松一點。

基本上,我正在htaccess文件中進行一些重寫,以將組成的對搜索友好的URL更改為實際的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重定向會在掛起之前暫停一會兒出現以下消息:“頁面未正確重定向”。

我想要的是在存在錯誤的ID時轉到我的boarderror.php頁面。 因此,基本上,我希望htaccess頁采用服務器友好的URL,切換到真實URL,然后...放開這一點,PHP將從那里開始。 這是我進行切換的htaccess行:

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

我究竟做錯了什么? (順便說一句,我意識到,如果我正確地設置了所有對搜索友好的網址,則無論如何都不會出現錯誤的ID,但是我希望安全起見……)

你的想法沒錯。 對於錯誤的ID,可以進行雙重重定向。 問題是第二重定向如何發生。 嘗試

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

要么

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

通過重定向,瀏覽器正在嘗試http://www.negativeworld.org/9999/news/boarderror.php (錯誤的ID為9999),這陷入了無盡的重定向循環,瀏覽器在嘗試10次后便被剪切。

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

假設我嘗試加載http://www.negativeworld.org/99999/news/nintendo-download-for-may-24-2012並且該ID無效。 在這種情況下,它將把用戶發送到http://www.negativeworld.org/99999/news/boarderror.php ,它再次觸發重定向並陷入無限循環(或者如果瀏覽器不夠智能,也會陷入這種情況)停止一遍又一遍地請求相同的網址)。

根據RFC 2616 ,位置標頭應提供絕對URI,因此您應執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM