因此,我尝试让 mod_rewrite 在我的新网站上运行。几年前,我曾成功使用过 mod_rewrite,但这次在“RewriteEngine On”之后,没有任何命令可以运行。
我在本地 Apache 2.2 上得到的效果与我在网络主机服务器上得到的效果完全相同,因此并不是服务器未针对 mod_rewrite 进行配置。我的本地计算机运行 Windows,而远程服务器运行 Linux,因此它们是相当独立的系统。以下是我到目前为止对本地主机进行的检查:
- httpd.conf 中的“LoadModule rewrite_module”行未使用 # 进行注释
- 我在 httpd.conf 中为我的 html 目录设置了“Options Indexes FollowSymLinks Includes”
- 并且我在选项行旁边也有“AllowOverride All”。
- 我网站根目录中的 .htaccess 文件正在被访问。如果在第一行输入无意义的内容,就会出现内部服务器错误,删除它就可以了
- 将“RewriteEngine Cheese”作为第一行后,我的错误日志中会出现一行“RewriteEngine 必须打开或关闭”,因此它似乎已准备好进行一些重写......
但是。在 RewriteEngine On 之后输入的任何内容都没有任何效果!我可以在其中输入无意义的内容,也不会收到任何错误消息。我在其中输入了很多命令作为测试,但即使是这个 .htaccess 文件也没有任何作用:
RewriteEngine On
RewriteRule ^.*$ test.html [R]
这应该会将我访问的每个页面重写为 test.html,不是吗?然而,什么也没有发生 - 如果我访问 hello.html,我只会得到一个网页,提示找不到 hello.html。
请问有人可以就下一步该尝试什么提出建议吗?
答案1
Linux 配置文件(包括 Apache 配置文件)要求最后一行为空。最后一个换行符之后的所有内容都将被忽略。
答案2
难以置信。经过几天的尝试,我发布的那个 .htaccess 文件今天突然开始工作,无论是在本地还是在远程服务器上。我做了什么?我不知道。我尝试添加一个空的最后一行,就像另一个答案建议的那样 - 然后它就起作用了。但现在我删除了空的最后一行,它仍然有效。所以我不知道发生了什么。抱歉这里的结果不明确。这对我来说是个谜。
重启本地机器甚至都不是解决办法,因为我还没有重启远程服务器,而我的 .htaccess 文件现在也突然开始在那里工作了。这是我在重新测试是否有效之前上传的唯一文件。