.htaccess 重定向到 public 文件夹,排除子域

.htaccess redirect to public folder, exclude subdomain

我有一个 PHP MVC 网站,根目录需要重定向到 public 文件夹。

www 文件夹包括:

- app
- public
- subdom/subdomain

子域文件夹是 subdomain.website.com

app 文件夹受到 Options -Indexes

的限制

我需要重定向到 public 文件夹,但如果我正在访问子域则不需要。

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/ [L,NC]

这将始终让我进入 public 文件夹,但我无法访问我的子域。

我总是可以访问我的子域或被重定向到 public 文件夹,但即使我想访问我的子域。

这是 Wedos 虚拟主机上 www 文件夹中的默认 .htaccess 文件。

RewriteEngine On

RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/ [DPI]

RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/ [DPI]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ // [R]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ // [R]

如何从重定向中排除子域?

website.com 应该是 网站。com/public

subdomain.website.com 应该保持这种状态 - 它不应该是 website.com/public

谢谢!

您应该在处理 /public 的 2 条规则前添加一个 RewriteCond 以检查当前主机名:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?website\.com$ [NC]
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=301]

RewriteCond %{HTTP_HOST} ^(www\.)?website\.com$ [NC]
RewriteRule ^((?!public/).*)$ public/ [L,NC]