我正在努力做一些改写,但它没有用。这是我的代码:
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。我不希望任何重写发生。怎么了?
答案 0 :(得分: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.*))$