我使用以下代码使用 mod_rewrite 将http://mywebsite.com/?page=2
更改为http://mywebsite.com/page/2
:
RewriteEngine On
RewriteRule ^page/([^/]*).php$ /?page=$1 [L]
但是当我输入旧网址时 - http://mywebsite.com/?page=2
页面仍然出现,并且网址不会更改为静态网址。mod-rewrite 是为了重定向用户,还是只是让动态 url 上的所有内容在输入时都显示在静态网址上?如果是这样,我如何将任何转到旧动态 url 的用户重定向到 - http://mywebsite.com/?page=2
重定向到新的静态 url http://mywebsite.com/page/2
?另外,谷歌是否仍然索引旧网址?
这是我完整的.htaccess文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [NC,L]
# external redirect from actual URL to pretty one
RewriteCond s/+?page=([^s&]+) [NC]
RewriteRule ^ /page/%1? [R=301,L]
# existing rule
RewriteRule ^page/([^/]+)/?$ /?page=$1 [L,QSA]
像这样拥有完整的 .htaccess:
RewriteEngine On
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} s/+?page=([^s&]+) [NC]
RewriteRule ^ /page/%1? [R=301,L]
# existing rule
RewriteRule ^page/([^/]+)/?$ /?page=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [L]
mod_rewrite
不一定会将访问者重定向到新的花哨的URL,但它将确保任何访问新URL的人仍然可以访问它,就好像它正在使用旧URL一样
我相信你可以用mod_substitute
实现这样的事情,但这不是我现在建议你做的事情。
如果可以,请手动更改链接以反映新的更改,或者使用一个函数来解析您的链接,例如
http://mywebsite.com/?page=2 to http://mywebsite.com/page/2
如
function fancyuri($url){
//blah blah, strip out ? and change all occurence of equality sign = to forward slash
//do some other tricks
//return formatted links
}
然后将您的链接作为参数传递给函数并让它返回您的漂亮 url,在这种情况下,即使您不再需要它,您也可以剥离函数中的格式代码,并且仍然返回您的原始 url。