显示旧网址时,mod_rewrite究竟如何工作



我使用以下代码使用 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。

最新更新