重写URL .htaccess - Apache服务器

时间:2013-07-04 23:01:10

标签: apache .htaccess url webserver rewrite

在我的网站上,我会重命名地址栏上的网址,来自

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。为什么呢?

这只发生在我的在线服务器上,而在本地就可以了。

1 个答案:

答案 0 :(得分:1)

mod_rewrite模块正在向浏览器发出重定向,而不是透明地重写网址,导致您在浏览器中看到新的网址。

尝试从RewriteRule中删除http://domain.com部分,看看是否通过将规则更改为以下内容来避免重定向到浏览器:

RewriteRule ^([0-9]+)-([^\.]*)\.html$ /economy/article.php?id=$1 [L]

如果失败,您还可以使用代理标志[P]强制apache透明地获取页面并将其返回给您的用户而不进行重定向。我不推荐这种方法,因为它可能具有安全隐患,但如果上述情况不适用,它应该有用。

编辑:为了澄清,使用完全限定的域而不是相对uri重写url告诉apache重定向位于不同的服务器上,因此它不知道新的可以在同一主机上访问url,而无需重定向客户端。