使用.htaccess重定向到干净的URL

时间:2015-04-09 00:05:16

标签: regex apache .htaccess mod-rewrite

我认为这对于精通.htaccess文件语法的人来说是一个相当简单的解决方案的问题,但不幸的是我不是。

我已经弄清楚如何制作它,以便当有人访问domain.com/something/5时,内部就会像访问domain.com/something/?page=5一样。然而,实际上,如果用户选择,用户仍然可以访问“丑陋”的URL,并且显然,拥有两个具有完全相同内容的不同URL的SEO是不好的。所以,我想强迫用户使用干净的URL。

这是我的.htaccess文件:

RewriteEngine On
RewriteRule ^\?page=([0-9]+)$ index.php?page=$1 [R=301,NC,L]
RewriteRule ^([0-9]+)/?$ index.php?page=$1 [NC,L]

当然,底部与问题并不真正相关,因为内部将干净的URL重定向到脏的URL的规则,但我认为无论如何我最好包括它。

我已经过了十几次在正则表达式中搜索错误,以及希望删除像插入符号和美元符号之类的东西,但是当我通过?page=5访问它时仍然没有任何反应

关于我如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

您无法访问RewriteRule中的查询字符串。如果您不希望他们仍然访问“丑陋”的URL,那么您需要检查REQUEST并将它们重定向到SEF URL。

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?page=([^\&\ ]+)
RewriteRule ^ /%1? [R=301,L]

RewriteRule ^([0-9]+)/?$ index.php?page=$1 [NC,L]

如果答案可以解决您的问题,请告诉我。