在我的网站上,我会重命名地址栏上的网址,来自
domain.com/economy/article.php?id=00
到
domain.com/economy/id-name-article.html
我写了这个.htaccess文件:
RewriteEngine On
RewriteRule ^([0-9]+)-([^\.]*)\.html$ http://domain.com/economy/article.php?id=$1 [L]
我有一个这个href:href="economy/id-name-article.html"
的锚点,当我点击它时,服务器被重定向到article.php
,它以正确的方式运行脚本,我可以查看文章,但是在地址栏上仍然会写domain.com/economy/article.php?id=00
而不是domain.com/economy/id-name-article.html
。为什么呢?
这只发生在我的在线服务器上,而在本地就可以了。
答案 0 :(得分:1)
mod_rewrite模块正在向浏览器发出重定向,而不是透明地重写网址,导致您在浏览器中看到新的网址。
尝试从RewriteRule中删除http://domain.com
部分,看看是否通过将规则更改为以下内容来避免重定向到浏览器:
RewriteRule ^([0-9]+)-([^\.]*)\.html$ /economy/article.php?id=$1 [L]
如果失败,您还可以使用代理标志[P]强制apache透明地获取页面并将其返回给您的用户而不进行重定向。我不推荐这种方法,因为它可能具有安全隐患,但如果上述情况不适用,它应该有用。
编辑:为了澄清,使用完全限定的域而不是相对uri重写url告诉apache重定向位于不同的服务器上,因此它不知道新的可以在同一主机上访问url,而无需重定向客户端。