【问题标题】:.htaccess redirect to public folder, exclude subdomain.htaccess 重定向到公用文件夹,排除子域
【发布时间】:2020-01-12 08:34:14
【问题描述】:

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

www 文件夹包括:

- app
- public
- subdom/subdomain

子域文件夹是subdomain.website.com

应用文件夹受 Options -Indexes

限制

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

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

这总是会让我进入公共文件夹,但我无法访问我的子域。

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

这是 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/$1 [DPI]

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

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

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

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

website.com 应该是 website.com/public

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

谢谢!

【问题讨论】:

    标签: .htaccess redirect directory subdomain


    【解决方案1】:

    您应该在处理/public 的两条规则之前添加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/$1 [L,NC]
    

    【讨论】:

    • 谢谢!这很好用。我无法绕过它。条件是否说“如果没有子域”?
    • 条件表示仅适用于website.comwww.website.com 的规则
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2013-11-08
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多