经过大量研究,我仍在努力。
我的./.htaccess
文件看起来像这样:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/trackparser/.*$
RewriteRule ^(\.well-known/.*)$ $1 [L]
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
但是,如果我转到www.mysite.com/trackparser
,只会给我一个控制器错误提示。
如何使它忽略trackparser目录?
除了@GregSchmidt所要求的/
,重写条件仅适用于遵循它们的第一个规则,因此您的配置基本上说:]]
后续规则的数量:IF (URI != ^/trackparser/.*$) { RewriteRule ^(\.well-known/.*)$ $1 [L] } RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L]
如果URI与
^/trackparser/.*$
不匹配,您想要应用所有三个规则。为此,您可以反转条件并使用跳过规则,该规则在应用时将跳过N
RewriteRule ^(\.well-known/.*)$ $1 [L] RewriteCond %{REQUEST_URI} ^/trackparser(/.*|$) RewriteRule . - [S=2] RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L]
如果满足条件,它将跳过
2
CakePHP Webroot规则,因此基本上是在做:
RewriteRule ^(\.well-known/.*)$ $1 [L] IF (URI != ^/trackparser(/.*|$)) { RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] }
注意删除的否定运算符,以及添加的
(/.*|$)
以使斜杠为可选。从理论上讲,well-known
目录的规则(证书验证)也可以跳过,但是我将其免除,以免由于以后的更改而意外地不应用它。
另请参见