Htaccess在组合规则时导致严重错误

时间:2016-02-07 08:57:23

标签: regex .htaccess mod-rewrite

当我将以下规则添加到.htaccess时,它可以正常工作。

RewriteRule ^(.+)$ /index.php?p=$1 [L,QSA]

当我添加以下规则时,如果没有上面的规则,它也可以。

RewriteRule ^(.+)/(.+)$ /index.php?p=$1&p2=$2 [L,QSA]

然而,当我同时使用这两个规则时,在第一个规则之前使用第二个规则,我得到Internal Server Error

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

这是因为第一条规则还将/index.php重写为自身。

你需要使用一个基于正面的否定正则表达式来排除/index.php

RewriteRule ^(.+)/(.+)$ /index.php?p=$1&p2=$2 [L,QSA]

RewriteRule ^((?!index\.php).+)$ /index.php?p=$1 [L,QSA]