Apache mod_rewrite 已启用,但不起作用

Apache mod_rewrite 已启用,但不起作用

第二天,我一直在努力解决使用 mod_rewrite 时遇到的问题。

系统操作系统:Windows XP HTTP 服务器:Apache 2.2 httpd

来自 httpd.conf 的几行相关内容

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
DocumentRoot "N:/Web-dev/www"

<Directory "/">
     Options Indexes +FollowSymLinks MultiViews
     AllowOverride All
     Order allow,deny
     Allow from all
</Directory>

<Directory "N:/Web-dev/www">
    Options Indexes +FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

.htaccess 包含:

RewriteEngine on
RewriteRule ^alice.html$ bob.html

php 信息说

Loaded Modules  core mod_win32 mpm_winnt http_core mod_so mod_actions mod_alias mod_asis mod_auth_basic mod_authn_default mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_setenvif mod_rewrite mod_proxy mod_php5 

两个文件都存在,正在加载 alice.html,它仍然加载它,在rewrite.log中,它显示:

127.0.0.1 - - [25/Apr/2011:11:01:27 +0300] [localhost/sid#7b5148][rid#2bc70b0/initial] (1) [perdir N:/Web-dev/www/] pass through N:/Web-dev/www/alice.html

我甚至尝试通过向重写引擎命令添加一些乱码来测试它是否正在读取 .htaccess 文件,结果证明:

[Mon Apr 25 10:47:04 2011] [alert] [client 127.0.0.1] N:/Web-dev/www/.htaccess: Invalid command 'ReDELETEMEwriteEngine', perhaps misspelled or defined by a module not included in the server configuration

但是对 RewriteRule 执行相同的操作,不会发生任何变化,就好像它忽略了这些。我甚至进行了更多测试 - 在 RewriteEngine 命令之前添加了一些 DELETEME - 它失败并出现错误,如果我之后添加任何内容,它会忽略它,就好像没有错误一样!

我没有选择了,该怎么办?

相关问题

答案1

进行了更多测试后,我得到了奇怪的结果 - 在 RewriteEngine 命令之前添加了一些 DELETEME - 它因错误而失败,如果我之后添加任何内容,它会忽略它,就像没有错误一样!

然后我回想起我使用正则表达式和文本分析的经验,我想知道篡改 CRLF 是否有用,并发现当前文件的新行符号是什么,发现它们是 CR。据我所知,Apache 是基于 unix 的软件,我想它可能会误解这些,所以我将它们转换为 LF,就这样,之后一切都正常了!

将来请注意 - 使用编辑器(EditPlus、Notepad++ 等)确保您的 .htaccess 换行符号是多平台兼容的(CRLF),或者至少是 unix 兼容的(LF),如果使用 apache 的话!

PS:抱歉,重复了(这里和stackoverflow)。

答案2

由于您在模式中明确引用了行首 (^) 和行尾 ($),也许您只需在重写规则中添加一个/即可匹配请求?

RewriteRule ^/alice.html$ bob.html
#            ^ this one

请求http://localhost/alice.html将发送一个请求路径“/alice.html”的标题,因此否则您的模式可能不匹配。

相关内容