对来自域根的查询字符串使用RewriteRules

时间:2014-06-05 15:06:30

标签: regex apache .htaccess mod-rewrite

我正在尝试重写我网站上的网址(以改善搜索引擎优化,这是一个AJAX网站),以便他们来自

http://www.domain.co.uk/?section=home

http://www.domain.co.uk/?section=contact

http://www.domain.co.uk/home

http://www.domain.co.uk/contact

分别

这是我第一次使用.htaccess进行重写,我发现我最终只是猜测我的表达/从其他问题中复制答案并试图让它们起作用。

我最接近的是改编这个答案here

RewriteEngine on
RewriteCond %{THE_REQUEST} ^GET\ /\?(([^&\s]*&)*)section=([^&\s]+)&?([^\s]*)
RewriteRule ^(.*)$ /section/%3?%1%4 [L,R=301]
RewriteRule ^section/(.*) index.php?section=$1 [L]

给我结果

http://www.domain.co.uk/section/contact

然而,这也打破了我的所有其他链接,并使网站没有CSS或javascript等。

此外,我网站的其中一个部分的网址看起来像这样

http://www.domain.co.uk/?section=blog&post=post-name-one

http://www.domain.co.uk/?section=blog&post=post-name-two

我想重写为

http://www.domain.co.uk/blog/post-name-one

http://www.domain.co.uk/blog/post-name-two

但是,我很不确定如何在RegEx中解决这个问题。

有人可以帮忙做到这一点吗?如果有很好的参考来写这些规则,我也很乐意听到它们。到目前为止,我所阅读的内容有助于解释正在发生的事情,但我还没有能够自己编写。

1 个答案:

答案 0 :(得分:2)

您可以在根目录中使用这些规则.htaccess:

RewriteEngine on

RewriteCond %{THE_REQUEST} \s/+\?section=([^\s&]+)&post=([^\s&]+) [NC]
RewriteRule ^ /%1/%2? [R=302,L]

RewriteCond %{THE_REQUEST} \s/+\?section=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/?$ /?section=$1&post=$2 [L,QSA]

RewriteRule ^([^/]+)/?$ /?section=$1 [L,QSA]