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伪静态(Rewrite).htaccess文件详解
如何在 Windows 的 XAMPP 中配置 .htaccess?