4

我为我的网站创建了一堆 RewriteRules,并且在我的本地设置中没有遇到任何问题。这是我的 .htaccess 中的一个片段:

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

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

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

我尝试将规则更改为:

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

并且页面正确加载。但是,地址栏显示的是 news.php,而不是 news。有什么我遗漏的东西,还是我被丑陋(而且不太安全)的地址困住了?谢谢!

4

2 回答 2

1

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

RewriteBase /

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

于 2016-07-02T19:25:57.640 回答
0

您是否尝试过在目标 URL 中添加前导斜杠,例如

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

于 2013-08-23T13:27:42.767 回答