RewriteRule重定向到绝对路径,而不是正确的URL

时间:2012-11-28 00:35:17

标签: .htaccess mod-rewrite

我为我的网站创建了一堆RewriteRules,在我的本地设置上没有问题。这是我的.htaccess的片段:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteRule ^news/?$ news.php [L]

在本地,当我访问127.0.0.1/news时,它会正确地重定向到news.php并屏蔽URL。我刚刚更新了远程服务器上的.htaccess文件并在尝试访问上面的示例时收到此错误:

在此服务器上找不到请求的网址/mnt/target02/123456/123456/www.mywebsite.com/web/content/news.php。

我已尝试将规则更改为:

RewriteRule ^news/?$ http://www.mywebsite.com/news.php [L]

并正确加载页面。但是,地址栏显示news.php,而不是新闻。有什么我想念的,还是我坚持丑陋(不太安全)的地址? 谢谢!

2 个答案:

答案 0 :(得分:1)

如果您像我一样,您试图避免在您的替换URL(新目标)中添加前导斜杠,以便您的同一.htaccess文件可以同时用于您的测试和生产服务器。我遇到了同样的问题,所需要的只是设置:

RewriteBase /

这告诉mod_rewrite将替换URL基于Web根目录而不是文件根目录。另一个提示是,如果您需要重定向到目标的顶层,请使用./而不是/。我的测试服务器有一个端口(8080)并且不在根(因此它具有RewriteBase的非空/site1/),并且Web上的大多数重写规则示例都不考虑这个案件。如果您从未使用前导斜杠开始替换,则可以在测试服务器和实时服务器上使用相同的.htaccess文件,并且您可能需要更改的是RewriteBase的值,而不是更新每一条规则。

答案 1 :(得分:0)

您是否尝试过向目标网址添加前导斜杠,例如

RewriteRule ^ news /?$ /news.php [L]