与使用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来说,改变一样,就像它忽略那些一样。我没有选择,该怎么做!?
答案 0 :(得分:9)
进行更多测试,我得到了奇怪的结果 - 在RewriteEngine命令之前添加了一些DELETEME - 它失败并出现错误,如果我之后添加任何内容,它会忽略它,就好像没有错误一样!
然后我回想起我对正则表达式和文本分析的经验,我想知道,如果篡改CRLF会有什么好处,并且发现,当前文件的新行符号是什么,发现它们在哪里CR。据我所知,Apache是基于unix的软件,我想,它可能会误解这些,所以我把它们转换成了LF,就是这样,事后一切都运转了!
注意将来 - 使用您的编辑器(EditPlus,Notepad ++等)确保您的.htaccess新行符号是多平台兼容(CRLF),或者至少是unix兼容(LF),如果使用apache! / p>