0

我正在尝试进行一些重写,但它不起作用。这是我的代码:

RewriteCond %{REQUEST_URI} !^(static/|server/|internal.php).*$
RewriteRule ^(.*)$ /internal.php?request=$1 [L]

我试图将所有内容重定向到/internal.php?request=blablabla,除了 internal.php 本身,以及两个文件夹中的东西,称为 static 和 server,因为这两个文件夹有图像等等。

例如
/hello/world=> /internal.php?request=hello/world/
/static/a/b/c/a.jpg=>/static/a/b/c/a.jpg 没有改变

但是代码不起作用,RewriteCond 似乎无法限制重写 internal.php 和两个文件夹。现在发生的事情是所有内容都将重写为 internal.php,而 internal.php 将再次重写为 internal.php。最后在无限循环后给我一个 500。我不希望发生任何重写。怎么了?

4

1 回答 1

0

/在请求 URI 表达式中缺少前导,您也应该转义点,internal.php以便它实际上匹配一个点而不是每个字符:

RewriteCond %{REQUEST_URI} !^/(static/|server/|internal\.php).*$
RewriteRule ^(.*)$ /internal.php?request=$1 [L]

请注意,这也将重写/static并且/server省略尾部斜杠,如果您想避免这种情况,例如可以添加另一个条件:

RewriteCond %{REQUEST_URI} !^/(static|server)$
RewriteCond %{REQUEST_URI} !^/(static/|server/|internal\.php).*$

很难把它放在一个表达式中,但是我对正则表达式没有那么经验,所以我很确定这不是最优雅的方式:

RewriteCond %{REQUEST_URI} !^/(((static|server)(/.*)?)|(internal\.php.*))$
于 2013-08-11T18:44:16.400 回答