我使用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是否意味着重定向用户,或者只是在输入时让动态网址上的所有内容都显示在静态网址上?如果是这样,我如何将转到旧动态网址的任何用户http://mywebsite.com/?page=2
重定向到新的静态网址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]
答案 0 :(得分:2)
像这样拥有完整的.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]
答案 1 :(得分:0)
mod_rewrite
一定不会将访问者重定向到新的花哨网址,但会确保访问新网址的任何人仍然可以访问它,就像使用旧网址一样
我相信你可以用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
}
然后将您的链接作为参数传递给该函数并让它返回您的好网址,在这种情况下,即使您不再需要它,您也可以删除该函数中的格式代码并仍然拥有原始网址返回。