Sco*_*ser 4 .htaccess mod-rewrite
我一直在拉我的头发试图解决这个问题,但没有任何工作.我在mysite.com/test.php上有一个网页 我想做一个简单的URL重写并将其更改为mysite.com/testRewrite/执行此操作的代码应为:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^testRewrite/$ test.php [NC,L]
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因,它都无法正常工作.当你转到新网址时 - mysite.com/testRewrite/它可以工作.
但是,如果您输入原始URL mysite.com/test.php,则不会将地址更改为浏览器中的新URL.
Jon*_*Lin 10
mod_rewrite不会自动强制从重写的URL重定向浏览器.您所遵循的规则只是说"如果有人要求/testRewrite/,则在内部将其更改为/test.php".它没有处理实际请求/test.php,这就是为什么当你试图访问mysite.com/test.php时,它会给你/test.php.
现在,mod_rewrite的问题在于您只需添加该规则:
RewriteRule ^test.php$ /testRewrite/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)
当它要求将浏览器重定向/test.php到/testRewrite/,将浏览器重定向之后的第一个规则将被施加,并且所述URI被重写到/test.php,然后它返回穿过整个重写引擎和上面的规则被再次施加,从而将浏览器重定向,因此第一条规则重写/test.php,上面的规则再次重定向,等等.你得到一个重定向循环.您必须添加一个条件以确保浏览器*实际请求/test.php,并且它不是通过重写引擎生成的URI:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php [NC]
RewriteRule ^test.php$ /testRewrite/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)
这样,在301重定向发生后,此规则将不会再次应用,因为实际请求将是GET /testRewrite/ HTTP/1.1,并且将不满足条件.
| 归档时间: |
|
| 查看次数: |
6387 次 |
| 最近记录: |