搜索引擎优化与htaccess的友好链接 - 重定向动态链接到静态

问题描述:

我有一个网站,我想切换到搜索引擎友好链接。为了腾出一些工作,我想通过htaccess的,使重定向,从而使像旧的动态链接:搜索引擎优化与htaccess的友好链接 - 重定向动态链接到静态

mydomain.com/mypage.php?id=1&something=2 

将被重定向到更友好的一个:

mydomain.com/mypage/1/2/ 

据我了解我需要这些重定向,以便搜索引擎不会因为重复的内容而惩罚我,因为我需要这样做,我认为它可能更容易让它们变成友好的而不是每个页面上的链接 - 我正在使用正常的html表单,所以它不会很直接。 我试图做到这一点的代码htaccess的:

Options +FollowSymlinks 
RewriteEngine On 

RewriteBase /directory for mydomain.com/ 

RewriteRule ^mypage\.php?id=([0-9]+)&something=([0-9]+)$ ^mypage/$1/$2 [R=302,QSA] 
RewriteRule ^mypage/([0-9]+)/([0-9]+)/?$ ^mypage.php?id=$1&something=$2 [QSA] 

但它不工作。我认为一个问题可能是“?”在:

^mypage.php?id=([0-9]+).... 

我可能是错的,但通过很多测试,我断定我不能使用?在那里标记,但不知道如何解决它。

请帮忙。

您无法匹配RewriteRule中的查询字符串。正确的方式来处理这是在DocumentRoot/.htaccess文件中使用这些规则:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase /test_redirects/ 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} \s/test_redirects/([^.]+)\.php\?id=([^\s&]+)&something=([^\s&]+) [NC] 
RewriteRule^%1/%2/%3? [R=302,L] 

# internal forward from pretty URL to actual one 
RewriteRule ^([^/]+)/([0-9]+)/([^/]+)/?$ $1.php?id=$2&something=$3 [L,QSA] 
+0

嗨,谢谢你的快速回答。我尝试了你的代码,它重写了网址以友好的,但页面没有打开 - 在服务器上找不到错误的404请求页面。这是否意味着我没有阅读第二条规则? – user1857756 2014-10-08 14:22:10

+0

当您收到404时,您在浏览器中看到的页面URL是什么? – anubhava 2014-10-08 14:24:04

+0

重写的一个。在这个例子中,它会是:mydomain.com/mypage/1/2,但我使用的URL指向旧的:mydomain.com/mypage.php?id=1&something=2 – user1857756 2014-10-08 14:27:55