与htaccess的SEO友好链接 - 将动态链接重定向到静态

时间:2014-10-08 14:06:10

标签: php regex .htaccess mod-rewrite redirect

我有一个网站,我想切换到SEO友好链接。为了省略一些工作,我想通过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]+)....

我可能错了,但经过多次测试我得出的结论是我不能使用?在那里标记但不确定如何解决它。

请帮忙。

1 个答案:

答案 0 :(得分:0)

您无法匹配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]