.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]
我有一个 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]