为什么这个mod_rewrite规则不能像记录的那样工作?

时间:2009-02-08 22:12:48

标签: apache mod-rewrite

我正在尝试在托管网站上调试网址重写,我无法访问vhost.conf,因此无法设置重写日志。我怎样才能调试不起作用的规则?

如果有人有任何见解,这是我正在努力理顺的规则:

RewriteRule ^([^/]+)\.([^/]+)$ xslt.php [L]

我期望发生的事情:有点但没有斜线的URL可以重写为指向xslt.php,然后停止重写,这样它就不会进入循环。究竟发生了什么? 500内部服务器错误(闻起来像 循环)。我知道我可以添加RewriteCond来专门排除xslt.php,但我更愿意理解为什么这会先破坏。

2 个答案:

答案 0 :(得分:3)

为什么不循环? xslt.php有点但没有斜线。尝试将选项更改为[L,NS]。

编辑:啊,我明白了。你缺少的是[L]终止了对这个请求的所有重写,但是仍然会生成一个获得自己的重写传递的子请求。 [NS]禁止通过。

答案 1 :(得分:0)

L flag causes a restart of the rewrite process使用新的重写网址xslt.php,然后您的模式也会匹配。

所以试试这个:

RewriteCond $0 !^xslt\.php$
RewriteRule ^([^/]+)\.([^/]+)$ xslt.php [L]