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