使用.htaccess将子域指向子目录

时间:2014-02-01 17:00:26

标签: wordpress .htaccess ssl subdomain wildcard

我知道有很多关于这个话题的主题,但是尽管有很多小时的搜索和尝试,我真的无法找到解决方案。所以我决定寻求帮助。

这是我的全景

1)我有一个域 www.mydomain.com ,其中包含Wordpress安装和通配符SSL证书

正如您可能知道的那样,Wordpress已经在.htaccess中编写了一些规则,这些规则:

# 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>

2)现在我需要在其他子域中添加额外的wordpress安装(没有WPMU,但是安装不同),将它们指向我想称为“subdomain_NAMEOFTHESUBDOMAIN”的子目录

3)据我所知,扩展SSL证书我无法通过cPanel创建子域名,但我必须使用.htaccess规则

这是我能够获得的地方:

1)我创建了一个通配符CNAME * .mydomain.com

2)我在public_html文件夹中创建了一个名为“subdomain_xxx”的目录

3)我已添加这些规则(在wordpress规则之前)将子域“ xxx.mydomain.com ”指向“ subdomain_xxx ”文件夹

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^subdomain_xxx/ - [L]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com$
RewriteRule ^(.*)$ subdomain_xxx/$1 [L]
</IfModule>

起初似乎有效:

  • 如果我去mydomain.com,我会得到相关的“第一级”wordpress www.mydomain.com
  • 如果我去ANYTHING.mydomain.com我仍然可以访问www.mydomain.com
  • 如果我去xxx.mydomain.com我正确地指出了“subdomain_xxx”目录中存在的wordpress安装

但存在问题:

如果我尝试复制任何其他htaccess-subdomain /子目录对的过程, 例如“subdomain_yyy”和“yyy.mydomain.com”,复制以前的规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^subdomain_yyy/ - [L]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com$
RewriteRule ^(.*)$ subdomain_yyy/$1 [L]
</IfModule>

继续被重定向到创建的第一个子域:xxx.mydomain.com

非常清楚,这是我完整的.htaccess内容:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^subdomain_xxx/ - [L]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com$
RewriteRule ^(.*)$ subdomain_xxx/$1 [L]

RewriteRule ^subdomain_yyy/ - [L]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com$
RewriteRule ^(.*)$ subdomain_yyy/$1 [L]
</IfModule>

# 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>

肯定有很多我不了解.htaccess(和正则表达式),所以我不仅要寻找快速解决方案,还要寻找其他一些信息来加深我对此事的理解。 我希望有人能够找到耐心。

提前致谢

1 个答案:

答案 0 :(得分:2)

我刚刚发现了如何正确地做到这一点

我使用的规则都错了。

这是正确的方法

RewriteCond %{HTTP_HOST} ^xxx.mydomain.com$ [NC]
RewriteRule ^(.*)$ /subdomain_xxx/$1 [L]

如果有人发表评论我会很高兴看到它,谢谢