我的RewriteRule有什么问题?

时间:2009-03-21 11:40:36

标签: mod-rewrite

我的.htaccess文件目前看起来像这样

AddType x-mapp-php5 .php
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule ^account$ /account/orders.php [L]

当我转到http://mywebsite.com/account时,它会在http://mywebsite.com/account/orders.php正确显示该页面。但是当我将RewriteRule更改为

RewriteRule ^account/orders$ /account/orders.php [L]

然后我转到http://mywebsite.com/account/orders,我收到错误404页面未找到。我做错了什么?

******其他详细信息**

我终于诊断出了这个问题。但我不明白为什么我的解决方案有效。考虑account / orders.php存在的场景。

以下规则不起作用

RewriteRule ^account/orders$ account/orders.php [L]

以下规则可行

RewriteRule ^account/order$ account/orders.php [L]

即如果Pattern评估为现有文件,则重写规则将失败。因此,当模式与替换相同但减去扩展时,重写规则将失败。如果我添加一个名为account / order.php的文件,那么这两个规则都将失败。

为什么会这样?

5 个答案:

答案 0 :(得分:1)

我不知道你的第一个例子是如何工作的,因为我相信也会传递初始斜杠。

RewriteRule ^ / account / orders $ /account/orders.php [L]

答案 1 :(得分:0)

奇怪,我觉得好...... 如果您有权访问Apache Configuration,请尝试为某些调试启用RewriteLog和RewriteLogLevel ...

另请查看网站的日志文件(如果您有访问权限,则可以随时查看)

答案 2 :(得分:0)

你尝试过相对路径吗?

RewriteRule ^account/orders$ account/orders.php [L]

修改您还应确保禁用MultiViews。这导致Apache执行一些额外的模糊文件匹配以查找类似的命名文件,因此/account/orders将在传递给mod_rewrite之前映射到/account/orders.php

答案 3 :(得分:0)

我首先会尝试在规则中添加重定向,因此我可以在浏览器中看到服务器上发生了什么。

RewriteRule ^account$ /account/orders.php [L,R]

另外请确保没有其他规则(之前的规则)干扰,以防您在此处未显示所有.htaccess文件。

答案 4 :(得分:0)

我正在回答我自己的问题,因为我最终确诊了这个问题。但我不明白为什么我的解决方案有效。考虑account / orders.php存在的场景。

以下规则不起作用

RewriteRule ^account/orders$ account/orders.php [L]

以下规则可行

RewriteRule ^account/order$ account/orders.php [L]

即如果Pattern评估为现有文件,则重写规则将失败。因此,当模式与替换相同但减去扩展时,重写规则将失败。如果我添加一个名为account / order.php的文件,那么这两个规则都将失败。

为什么会这样?