2

我的旧网站有一个类似“/index.php?s=subsite”和“/?s=subsite”的网址。
现在我将以下几行添加到“.htaccess”文件中,以使它们更短:

RewriteEngine On  
RewriteBase /  
RewriteRule ^(.+)\.(html)?$ index.php?s=$1&%{QUERY_STRING} [L]  

使用“/subsite.html”打开一个站点可以正常工作,但旧网址“/index.php?s=subsite”和“/?s=subsite”也可以。有没有办法只允许“/subsite.html”并将旧请求重定向到它?

4

2 回答 2

0

将此规则添加到您的 htaccess 文件中:

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

这与请求匹配,尝试捕获s查询字符串参数,然后将浏览器重定向到该参数,然后是“.html”和那里的任何查询字符串的其余部分。

于 2013-08-29T10:15:57.820 回答
0

用以下代码替换您的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?s=([^\s]+) [NC]
RewriteRule ^ /%1.html? [R=301,L]

RewriteRule ^([^.]+)\.html$ /index.php?s=$1 [L,NC,QSA]
于 2013-08-29T11:09:12.073 回答