1)当我有无效规则时,没有报告有意义的错误
2)要可靠地测试每个修改,我必须清除chrome的缓存。这不是火箭科学,但我必须按Ctrl + Shift + Delete,然后单击“确定”,然后关闭窗口并重新加载。
我想看看是否有任何大师愿意分享他们的秘密以有效管理mod_rewrite代码。
#1 楼
一种技巧是打开重写日志。要打开它,请在您的apache主配置或当前虚拟主机文件中尝试以下行(不在.htaccess
中):RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
因为Apache httpd 2.4 mod_rewrite RewriteLog和RewriteLogLevel指令已被新的按模块记录新配置完全取代。
LogLevel alert rewrite:trace6
评论
您不能将其放在.htaccess中。您必须将其放在VirtualHost配置中。
–阿蒂拉·塞泽勒米(Attila Szeremi)
13年3月14日在14:14
您也必须在那里有RewriteEngine On部分,因为如果仅在.htaccess文件中启用它(就像我一样),那么将不会记录任何内容。
–chacham15
13年13月13日23:20
apache 2.4中的日志文件在哪里?
–查尔斯·约翰·汤普森三世
15年1月26日在19:53
您将在相关的错误日志中找到2.4日志项。这可能取决于您的配置,但是默认的Debian / Ubuntu设置在/var/log/apache2/error.log中有它们。
–约西亚
15年5月8日在21:34
专家提示:请记住要关闭重写日志记录。如果您忘记了,则会很快地将硬盘填满,尤其是在生产服务器上。
–约翰·亨特
2015年5月21日在15:18
#2 楼
Ben提到的LogRewrite指令在Apache 2.4中不再可用。您需要改用LogLevel指令。例如
LogLevel alert rewrite:trace6
请参见http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
评论
与此相关的日志文件在哪里?
–查尔斯·约翰·汤普森三世
15年1月26日在19:53
@CharlesJohnThompsonIII-日志文件是错误日志(由ErrorLog指令指定)。根据文档,您只能使用grep获得重写消息:tail -f error_log | fgrep'[rewrite:'
–billynoah
15年5月13日在10:02
不要忘记重启apache
–会计م
16 Dec 29 '21:45
我必须确保将AllowOverride设置为All!
–迈克尔
17年8月2日在4:42
#3 楼
对于基本的URL解析,请使用命令行提取程序(例如wget
或curl
)进行测试,而不要使用手动浏览器。然后,您不必清除任何缓存;只需向上箭头,然后输入一个shell以重新运行您的测试抓取。评论
另一个技巧是使用Chrome的“色情模式”(Ctl + Shift + N)。当您关闭窗口时,所有缓存的会话上下文都会被删除。
– TerryE
2012年3月10日16:09
我认为Firefox的“私人会话”浏览也可以。但是您是说这个上下文是针对每个窗口的(因此您没有关闭Chrome吗?)
–卡兹
2012年3月11日,0:08
AFAIK,Chrome和Ff的不同之处在于Ff作为单个进程运行,而该进程是否处于私有模式。使用Chrome,每个标签页或窗口都作为单独的进程运行,并且可以分别在私有模式下运行;关闭一个私有窗口/选项卡,并且上下文已被删除。
– TerryE
2012年11月11日,0:48
FF的PrivateTab插件可以执行此操作。每个选项卡分别工作。
–贾维德
2014年2月11日14:37在
此方法还显示重定向!非常适合无法访问机器apache配置文件的人。
– Geof Sawaya
17年1月25日在6:12
#4 楼
有htaccess测试器。它显示了针对特定URL测试了哪些条件,满足条件的条件以及执行了哪些规则。
似乎存在一些故障,但是。
评论
对我来说,它在最后一行显示了一条绿色的执行规则,没有任何代码。
–安迪
15年6月15日在12:50
@thombr,你能更精确吗?链接不起作用?还是工具?到底什么不起作用?为什么在这个问题中与此相关?
–安迪
16 Mar 9 '16 at 15:22
这告诉我,URL正在按预期方式转换...但是,在实际服务器上,我得到的是404
–迈克尔
17年8月2日在4:09
@michael是您配置中唯一存在的测试规则吗? mod_rewrite是否已实际安装并处于活动状态?
–安迪
17年8月2日在11:30
原来没有启用替代
–迈克尔
17年8月2日在17:44
#5 楼
根据Ben的回答,您可以在Linux上运行apache时执行以下操作(在我的情况下为Debian)。首先创建文件rewrite-log.load
/ etc / apache2 / mods-availabe / rewrite-log.load
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
然后输入
$ a2enmod rewrite-log
后跟
$ service apache2 restart
完成调试重写规则后,
/>
$ a2dismod重写日志&&服务apache2重新启动
评论
这没有用。我得到sandino @ envy:〜$ sudo服务apache2 restart *重新启动Web服务器apache2 [失败] * apache2 configtest失败。配置测试的输出为:AH00526:/etc/apache2/mods-enabled/rewrite-log.load的第1行的语法错误:无效的命令“ RewriteLog”,可能是拼写错误或由服务器配置中未包含的模块定义
–桑迪诺
2014年8月24日,0:14
@sandino,您正在运行哪个Apache版本?似乎此语法已针对2.4进行了更改,改为使用:LogLevel警告rewrite:trace8或LogLevel info rewrite:trace8其中8可以是1-8之间的任何数字
–insaner
2014年9月13日下午13:34
评论
Puk,请参阅stackoverflow.com/questions/9153262/…,在这里我讨论一些标准技巧。如何调试htaccess重写脚本的可能重复项