[英]How do I detect, remove, and redirect urls with a # at the end in PHP?
客戶要求我自動將任何帶有英鎊符號的網址重定向到沒有英鎊符號的版本,但我不認為我在使用此公式的任何網址中檢測到#。 我使用curPageURL()公式通過電子郵件向自己發送了一個示例網址,它在我測試的網址中沒有包含尾隨的#符號。
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
if(stripos($currenturl,'#'))
{
Header( "HTTP/1.1 301 Moved Permanently" );
$location = 'Location: ' . str_replace('#','',$currenturl) . '/';
Header($location);
}
* 更正 - 我在標題的最后說,我的意思是結束,我的代碼在這里可以檢測到網址中任何地方的英鎊符號。 *
#
之后的部分是“哈希”或“片段”。 它完全是客戶端 - 它永遠不會發送到服務器(如果是,它會導致錯誤)。 因此,您的PHP腳本永遠不會看到它,因此無法修復它。 這是正確的行為,並且是設計的。
也就是說,你可以使用客戶端解決方案檢查#fragment(例如在JS中使用document.location.hash
)並從那里重定向。
您可以使用javascript覆蓋頁面上所有標記的點擊事件。 如果您正在使用jQuery,您可以執行以下操作。
$(function() {
$('a').click(function(ev) {
alert(ev.currentTarget.hash);
return false;
});
});
<table>
<tr><td><a href='http://google.com/#test1'>Test 1</a></td></tr>
<tr><td><a href='/game/?p=test#test2'>Test 2</a></td></tr>
<tr><td><a href='#test3'>Test 3</a></td></tr>
</table>
單擊鏈接時會觸發click事件,此時您可以根據href中的哈希值決定要執行的操作。 您可以使用散列作為GET參數重建href並重定向頁面,或者您可以將其轉換為ajax調用。
在click事件中,您可以決定如何處理hash標記。 如果你真的需要它在服務器端,那么你總是可以將它附加到查詢字符串或你可以做一個ajax調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.