我的mod_rewrite存在两个主要问题:

1)当我有无效规则时,没有报告有意义的错误



2)要可靠地测试每个修改,我必须清除chrome的缓存。这不是火箭科学,但我必须按Ctrl + Shift + Delete,然后单击“确定”,然后关闭窗口并重新加载。

我想看看是否有任何大师愿意分享他们的秘密以有效管理mod_rewrite代码。

评论

Puk,请参阅stackoverflow.com/questions/9153262/…,在这里我讨论一些标准技巧。

如何调试htaccess重写脚本的可能重复项

#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解析,请使用命令行提取程序(例如wgetcurl)进行测试,而不要使用手动浏览器。然后,您不必清除任何缓存;只需向上箭头,然后输入一个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