Windows Apache .htaccess RewriteRule 错误

Posted

技术标签:

【中文标题】Windows Apache .htaccess RewriteRule 错误【英文标题】:Windows Apache .htaccess RewriteRule error 【发布时间】:2017-04-21 18:46:44 【问题描述】:

在我的 linux 服务器上,我有以下 .htaccess:

Options FollowSymLinks
RewriteEngine On
RewriteRule ^page/([^-]*)/([^-]*)$ index.php?module1=page&module2=$1&$2 [L]
RewriteRule ^page/([^-]*)$ index.php?module1=page&module2=$1 [L]
RewriteRule ^game/([^-]*)/([^-]*)$ index.php?module1=game&module2=$1&$2 [L]
RewriteRule ^game/([^-]*)$ index.php?module1=game&module2=$1 [L]
RewriteRule ^admin/([^-]*)/([^-]*)$ index.php?module1=admin&module2=$1&$2 [L]
RewriteRule ^admin/([^-]*)$ index.php?module1=admin&module2=$1 [L]

现在我想在我的 Windows 7 上设置它。我使用 WebServ 作为服务器(它构建在 apache2 之上)。

如果我复制粘贴这个 .htaccess,那么它最终会出现 http 错误 500

我必须评论 Options FollowSymlinks 才能使其工作。 但是重写仍然根本不起作用。 我试过了:

改变一切

apache2/conf/httpd.conf 中的AllowOverride xxx 到AllowOverride All

在我拥有的同一个文件中:

LoadModule rewrite_module modules/mod_rewrite.so(无注释)

所以问题是: 1. 为什么 Options FollowSymLinks 以 http 错误 500 结尾 2. 为什么重写不起作用?

最好的祝福

【问题讨论】:

符号链接在 MS-Windows 环境中不存在。它们是 unix/linux 传统的概念,在 MS-Windows 下没有直接对应的特性。这可能意味着如果该选项是专门为该环境创建的,则该选项在该 http 服务器中不存在。 我们无法透露更多信息,因为我们无法访问您的系统和所有信息。你必须把它给我们。首先是:“但是重写仍然根本不起作用”实际上是什么意思? 将您的 http 服务器错误日志文件的相关部分添加到问题中。 “重写仍然无法正常工作”因为如果我转到 myurl/game/overview 它会显示错误 404 而不是将其重写为 index.php?module1=game&module2=$1&$2 那么我要求的错误日志文件的内容呢?看不到您将其添加到问题中... 我解决了,RewriteBase 成功了 【参考方案1】:

调试很困难。当您没有足够的事实时,调试会变得更加困难。你需要更多的事实。不是虚构的事实,而是真实的事实。要获得更多真实的事实,请打开日志记录。如果运行 Apache 2.4,see this。做这样的事情:

LogLevel alert rewrite:trace3

去阅读日志,它会详细告诉你 Rewrite 正在做什么。如果没有足够的细节,请将其提高到trace6。我的经验是,500 通常(并非总是)由无限循环引起。祝你好运!

【讨论】:

在我的 httpd.conf 我有 LogLevel warn 如果我将它更改为 LogLevel alert rewrite:trace3 我的服务器不想启动(它打印 LogLevel 需要一个参数)。那是因为我的 apache 版本是 2.2 这不是问题的答案,是吗? 你的意思是我要把apache升级到2.4?

以上是关于Windows Apache .htaccess RewriteRule 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Apache .htaccess 创建虚拟主机?

Apache伪静态(Rewrite).htaccess文件详解

htaccess编写规则

如何在 Windows 的 XAMPP 中配置 .htaccess?

htaccess 文件、php、包括目录和 windows XAMPP 配置噩梦

.htaccess 文件不适用于我的项目