.htaccess 根据url的第一部分重写COND无效

.htaccess 根据url的第一部分重写COND无效,.htaccess,rewrite,.htaccess,Rewrite,我正试着重写一些东西,但没用。这是我的密码: RewriteCond %{REQUEST_URI} !^(static/|server/|internal.php).*$ RewriteRule ^(.*)$ /internal.php?request=$1 [L] 我试图将所有内容重定向到/internal.php?request=blabla,除了internal.php本身,还有两个名为static和server的文件夹中的内容,因为这两个文件夹都有图像等等 比如说,, /hello

我正试着重写一些东西,但没用。这是我的密码:
RewriteCond %{REQUEST_URI} !^(static/|server/|internal.php).*$
RewriteRule ^(.*)$ /internal.php?request=$1 [L]

我试图将所有内容重定向到
/internal.php?request=blabla
,除了internal.php本身,还有两个名为static和server的文件夹中的内容,因为这两个文件夹都有图像等等

比如说,,
/hello/world
=>
/internal.php?请求=hello/world/

/static/a/b/c/a.jpg
=>
/static/a/b/c/a.jpg
未更改


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

在请求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.*))$