【问题标题】:htaccess will not rewrite subdomainshtaccess 不会重写子域
【发布时间】:2016-04-26 05:57:47
【问题描述】:

我目前在我的htaccess 文件中有此代码存储在根目录中:

RewriteEngine On
DirectoryIndex index.php

RewriteCond %{HTTP_HOST} admin.mydom.com$
RewriteRule ^(.*)$ /admin/system/$1 [L]

RewriteCond %{HTTP_HOST} ^([^/.]+)\.mydom\.com$
RewriteRule ^(.+)$ /subdomains/%1/ [L]

RewriteCond %{HTTP_HOST} !mydom.com$ [NC]
RewriteRule ^(.*)$ http://www.mydom.com/$1 [L,R=301]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

该文件应确保在网站上完成以下操作:

admin.子域映射到/admin/system

将所有子域映射到/subdomains/{subdomain}

mydom.com以外的任何域重定向到mydom.com

然后是标准的wordpress htaccess

除了子域部分之外它工作正常,所有子域都被重定向回主域(mydom.com)

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    你可以试试改开头:

    RewriteEngine On
    DirectoryIndex index.php
    
    RewriteCond %{HTTP_HOST} admin\.mydom\.com$ [NC]
    RewriteRule !^admin/system/ /admin/system%{REQUEST_URI} [L]
    
    RewriteCond %{HTTP_HOST} !^www\.mydom\.com$ [NC]
    RewriteCond %{HTTP_HOST} ^([^/.]+)\.mydom\.com$ [NC]
    RewriteRule !^subdomains/%1 /subdomains/%1%{REQUEST_URI} [L]
    
    RewriteCond %{HTTP_HOST} !mydom.com$ [NC]
    RewriteRule ^(.*)$ http://www.mydom.com/$1 [L,R=301]
    

    它避免了多次重写
    但我不知道这是否是你问题的根源

    【讨论】:

    • 如果我访问 www.那是显示内部服务器错误
    • 是的,停止了错误,但现在当我访问子域时,它显示的内容与主域相同,而不是子域目录中的内容
    • 带www的内容和主域一样吗?
    • 有和没有 www。显示主域很好。所有子域都应映射到/subdomains/{subdomain},但它们都显示主域
    • 是的,因为它可以直接访问目录,所以工作正常,但是当转到sub.mydom.com 时,它应该映射到www.mydom.com/subdomains/sub,而是显示主域(www.mydom.com)
    【解决方案2】:

    像这样:

    DirectoryIndex index.php
    
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC]
    RewriteRule ^ http://www.mydom.com%{REQUEST_URI} [L,R=301,NE]
    
    # redirect sub.dom2.com to sub.mydom.com
    RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.(?!mydom\.)[^.]+\. [NC]
    RewriteRule ^ http://%1.mydom.com%{REQUEST_URI} [L,NE,R=302]
    
    RewriteCond %{HTTP_HOST} admin\.mydom\.com$ [NC]
    RewriteRule !^admin/system/ admin/system%{REQUEST_URI} [L,NC]
    
    RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.mydom\.com$ [NC]
    RewriteRule !^subdomains/ subdomains/%1%{REQUEST_URI} [L,NC]
    
    RewriteRule ^(subdomains/|admin/|index\.php$) - [L,NC]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
    

    【讨论】:

    • 这似乎与主域(有和没有 www.)分开工作,它试图去/subdomains/www
    • 啊,是的,现在可以工作了 - 如果您访问 sub.dom2.com,它会转发到 sub.dom.com,所以所有子域都将转发到主域
    • 好的,所以我们有多个域指向该服务器。这就是为什么它重定向到www.dom.com 的所有内容,如果它还不是 URL。如果有人访问dom2.com,它会将他们重定向到dom.com,但是我如何为子域添加相同的内容-如果有人访问sub.dom2.com,它当前将重定向到www.dom.com,但它可以重定向到同一个子域吗?跨度>
    • 刚刚更新了 - 它现在没有将子域映射到子域目录,它只是显示主网站
    【解决方案3】:

    您可以使用以下规则:

    RewriteEngine On
    DirectoryIndex index.php
    
    RewriteCond %{HTTP_HOST} ^admin\.mydom.com$
    RewriteRule ^((?!admin/system).*)$ /admin/system/$1 [L]
    
    RewriteCond %{HTTP_HOST} ^((?!www\.).+)\.mydom\.com$
    RewriteRule ^(.+)$ /subdomains/%1/ [L]
    
    RewriteCond %{HTTP_HOST} !mydom.com$ [NC]
    RewriteRule ^(.*)$ http://www.mydom.com/$1 [L,R=301]
    

    在测试之前清除浏览器的缓存。

    【讨论】:

    • @Charlie 你在 htacces 中还有其他规则吗?
    • 检查 OP 的其他规则
    • @Charlie 如果这是您的完整 htaccess,那么此处发布的两个答案都应该有效。
    • 很遗憾没有:(
    猜你喜欢
    • 2011-05-15
    • 2011-02-04
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多