0

我正在为我的游戏网站进行新设计,我所做的是制定了重写规则:

RewriteRule ^play/([^/\.]+)/?$ index.php?play=$1 [L]

这非常有效,当用户打开位于地址栏(规范 url)中的 /play/gamename 并使用我的 index.php 加载游戏页面时。

但是,我现在想做的是,当用户访问旧 url ( index.php?play=gamename) 时,他们应该被重定向到新的规范 url ( /play/gamename)。

有人可以为我输入代码吗?我愿意使用 .htaccess 文件或 index.php 文件执行此操作,以最有效的方式执行此操作。

另一个问题是我已经有很多 facebook 评论和喜欢,它们指的是index.php?play=gamename页面,是否也可以以某种方式将这些喜欢和评论移动到新的更漂亮的 url 上?

4

2 回答 2

0

在 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 而言,我看到了这些: Facebook 喜欢计数在 301 重定向后重置如何管理可能略有变化的 URL 的“喜欢”按钮?

于 2013-12-26T15:11:31.320 回答
0

我认为您会寻找这样的东西来从旧 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,您对旧评论无能为力,但您的重写会为您网站的任何未来点击处理。

于 2013-02-25T02:04:14.720 回答