RewriteRule / RewriteCond帮助 - 匹配除目录之外的任何内容

时间:2012-06-02 10:28:22

标签: regex apache .htaccess mod-rewrite

目前,我有规则

RewriteRule ^([A-Za-z0-9-/]+)$ myFile.php?myId=$1

我希望能够访问文件夹及其文件(简单地说它叫做示例),以及它的index.php。但是,使用规则

RewriteRule ^example$ example/index.php [L]

它改为匹配第一条规则。不过,这是该文件的第一条规则。

2 个答案:

答案 0 :(得分:1)

执行重写规则后,example URL将重写为example/index.php,然后重新进入重写过程[L]标记不要阻止)。然后,您的其他重写规则匹配。

因此,您必须为example/index.php添加例外。例如:

RewriteRule ^example/index.php$ - [L]

终止第二次重写运行。请务必将其插入其他规则之上。

答案 1 :(得分:0)

您可以使用条件:

RewriteCond %{REQUEST_URI} !^/example
RewriteRule ^([A-Za-z0-9-/]+)$ myFile.php?myId=$1 [L]

这样您就可以获得规则匹配,除非请求以'/ example'开头。您可以添加额外的斜杠,即'/ example /'以避免不匹配'/ example-page'。