[英].htaccess or php redirect to friendly url when index.php?*=* is accessed directly
我正在為我的游戲網站進行新設計,並且我做了一個重寫規則:
RewriteRule ^play/([^/\.]+)/?$ index.php?play=$1 [L]
當用戶打開/ play / gamename並停留在地址欄中(規范網址)並使用我的index.php加載游戲頁面時,此方法非常有效。
但是,我現在想做的是,當用戶訪問舊的URL( index.php?play=gamename
)時,他們應該被重定向到新的規范URL( /play/gamename
)。
有人可以幫我輸入代碼嗎? 我願意同時使用.htaccess文件或index.php文件(以效果最好的一種)進行操作。
另一個問題是,我已經有很多Facebook評論和喜歡的內容,它們引用了index.php?play=gamename
頁面,是否還可以將這些喜歡和評論以某種方式移至新的漂亮網址?
我認為您將尋找類似這樣的東西來從您的舊URL重定向到您的新URL,同時還要將該URL保留為提供腳本的實際位置。
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Stop rewrite from doing an infinite loop by rejecting redirects
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{QUERY_STRING} ^play=(.*)$
RewriteRule .* /play/%1? [NC,R=301,L]
# Rewrite all requests from /play/ to index.php
RewriteRule ^play/(.*)$ /index.php?play=$1 [NC,L]
至於facebook,您無法對舊評論進行任何處理,但是您的重寫將為以后訪問您網站的所有內容提供幫助。
在php中執行此操作的方法如下:
此功能檢查是否正在直接查看頁面。
function directviewcheck(){
$requestingurl = $_SERVER['REQUEST_URI'];
$phpself = $_SERVER['PHP_SELF'];
$phpselflength = strlen($phpself);
$resulturlcrop = mb_substr($requestingurl, 0, $phpselflength);
if( $resulturlcrop == $phpself ){
return true;
}else{
return false;
}
}
這將告訴您瀏覽器中的url是否與文件名匹配。 如果這樣做,它將返回true。
接下來在index.php中調用它:
if( directviewcheck() == true ){
// your redirect code
// Something like this should work
$gamename = $_GET['play'];
header("HTTP/1.1 301 Moved Permanently")
header("Location: http://www.yoursite.com/play/" . $gamename );
exit; // make sure you use exit or its alias die to prevent the page from showing.
}
舊鏈接將轉到新頁面,仍然可以在舊鏈接上訪問您內容的搜索引擎將知道將其刪除並為新鏈接建立索引。
如果需要使位置變量更具動態性,則可以將其設置為變量,然后根據用途將其放置在header()中。
無論如何,您的問題很舊,但也許對您或其他人仍然有用。
====
在.htaccess中,sjdaws看起來可以工作。
====
在您的Facebook上,我看到了以下內容: 301重定向后,Facebook計數重置或“ 如何管理”“喜歡”按鈕的URL可能會略有變化?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.