我正在尝试重写我网站上的网址(以改善搜索引擎优化,这是一个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中解决这个问题。
有人可以帮忙做到这一点吗?如果有很好的参考来写这些规则,我也很乐意听到它们。到目前为止,我所阅读的内容有助于解释正在发生的事情,但我还没有能够自己编写。
答案 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]