我正在尝试安装 SilverStripe,在安装过程中,它返回一个错误,提示友好链接不起作用。但是 mod_rewrite 已启用并且 AllowOverride 设置为 All。我在以 Webmin 作为 cp 的专用服务器上使用 CentOS Linux(是的,我知道……不是我的选择)。
3 回答
即使您收到该错误消息,安装程序也应该尽可能地进行设置。
这个问题有点难以回答,因为问题可能出在许多不同的地方,但我尝试在下面整理出故障排除指南。
注意:下面的许多链接都被故意破坏了,因为 Stack Overflow 认为我可能是垃圾邮件发送者。;-)
假设您的站点位于 http:/www.example.com,请尝试访问 http:/www.example.com/dev/build - 您应该会看到一个标题为“Environment Builder(以前称为 db/build)”的页面。如果这样可行,那么您在重写方面没有问题,并且安装程序错误地给了您该消息。
如果这给了您 404,请尝试 http://www.example.com/sapphire/main.php?url=dev/build - 这将访问相同的功能,但绕过 mod_rewrite。如果这给了您“Environment Builder(以前称为 db/build)”的标题,而之前的 URL 没有,那么您的 mod_rewrite 有问题,而不是其他问题。
- 检查 .htaccess 文件的内容。它应该看起来像这样,但可能有
RewriteBase
线条。 - 尝试将一些垃圾文本 - 例如“asdfsahjadsfasdf” - 放入 .htaccess 文件并保存。打开您的网站。它会给你一个500错误吗?如果没有,那么您的
AllowOverride All
设置不起作用。检查您是否已将其设置在正确的位置。请记住 - 它需要在您的 Apache 配置文件中,而不是.htaccess
. 如果您无权访问相关配置文件,您可能需要请您的 ISP 帮助您回答这个问题。 如果这不能发现问题,我们将不得不修改重写规则,看看我们是否可以探索发生了什么。尝试更改此行:
RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
为此(它将重写规则转换为重定向规则):
RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L,R]
再次访问 http://www.example.com/dev/build 是否重定向到任何地方?如果没有,则 mod_rewrite 不起作用。它应该重定向到 http://www.example.com/sapphire/main.php?url=dev/build。它是否重定向到其他地方?例如,是否在
?url=
参数中插入了额外的垃圾?如果您在子目录中运行 SilverStripe,有时会发生这种情况。在这种情况下,请检查RewriteBase
设置是否设置了该子目录。类似的东西RewriteBase /mysubdir
。
如果您仍然无法使友好的 URL 正常工作,那么恭喜 - 您发现了一个非常糟糕的边缘案例!将您按照上述步骤发现的详细信息发布到 SilverStripe IRC 频道或 www.silverstripe.org 上的论坛。
第 1 步。在您的 .htaccess 文件中放入一些垃圾,看看 Web 服务器是否给您一个错误。
这里的重点是找出——假设服务器正在运行 Apache——SS 安装程序生成的 .htaccess 文件是否实际上正在被读取。如果仍有问题,请尝试在 SS IRC 频道上提问。