我一直在抓着头发试图解决这个问题,但没有任何效果。我有一个网页位于mysite.com/test.php我想做一个简单的 URL 重写并将其更改为mysite.com/testRewrite/实现这一点的代码应该是:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^testRewrite/$ test.php [NC,L]
无论出于何种原因,它都不起作用。当您转到新网址时 -mysite.com/testRewrite/有用。
但是,如果您输入原始 URLmysite.com/test.php它不会将浏览器中的地址更改为新的 URL。
mod_rewrite 不会自动强制从重写的 URL 重定向浏览器。你的规则只是说“如果有人要求/testRewrite/
,在内部将其更改为/test.php
“。它对处理实际请求没有任何作用/test.php
,这就是为什么当您尝试访问时mysite.com/test.php,它给你/test.php
.
现在,mod_rewrite 的问题是如果您只是添加该规则:
RewriteRule ^test.php$ /testRewrite/ [L,R=301]
当浏览器要求时,它将重定向浏览器/test.php
to /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]
这样,在 301 重定向发生后,该规则将不会再次应用,因为实际请求将是GET /testRewrite/ HTTP/1.1
,并且条件不会得到满足。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)