Htaccess Rewrite规则配置及重写日志记录技术咨询
问题解答
需求可行性
完全可行,通过调整.htaccess的Rewrite规则即可实现你的需求。
正确的.htaccess配置
你当前的规则逻辑存在错误:原规则中RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d的组合,意味着只要请求的不是文件,或者不是目录,就跳过下一条RewriteRule——而一个请求不可能同时是文件和目录,所以针对file的规则永远不会触发,导致存在的文件/目录直接被访问。
正确的配置应该优先处理/home的规则,再将所有其他请求(无论文件/目录是否存在)转发到index.php?file=,同时排除index.php本身避免循环:
# 处理 /home 跳转至 index.php?page=home RewriteRule ^home$ /index.php?page=home [L,QSA] # 排除index.php自身,防止重写循环 RewriteCond %{REQUEST_URI} !^/index\.php$ # 将所有其他请求转发至 index.php?file=请求路径 RewriteRule ^(.*)$ /index.php?file=$1 [L,QSA]
解释:
[L]标记表示这是最后一条匹配的规则,避免后续规则继续处理[QSA]标记会保留原请求的查询参数(如果有的话)
Rewrite日志不生成的解决步骤
确认mod_rewrite模块已启用
在httpd.conf中确保存在以下行(没有的话添加):LoadModule rewrite_module modules/mod_rewrite.so检查目录的AllowOverride设置
在httpd.conf中找到网站根目录对应的<Directory>块,确保AllowOverride设置为All(否则.htaccess规则不生效,日志也不会记录):<Directory "/path/to/your/web/root"> AllowOverride All # 其他配置... </Directory>确认日志配置正确且权限足够
- 确保
httpd.conf中错误日志路径配置正确,例如:ErrorLog "logs/error_log" - 检查Apache进程对日志文件所在目录有写入权限
- 确保
重启Apache服务
修改httpd.conf后必须重启Apache,配置才会生效。重启命令根据系统不同:- Linux:
sudo systemctl restart httpd或sudo service apache2 restart - Windows:在服务管理器中重启Apache服务
- Linux:
内容的提问来源于stack exchange,提问作者Roberts Lacis
相关产品推荐
相关产品推荐

