使用htaccess将drupal指向子文件夹

时间:2014-02-03 06:08:32

标签: php apache .htaccess mod-rewrite drupal

在我的共享主机根目录中,我有两个文件夹main&演示。主要包含主网站的drupal 7文件,演示包含本网站的演示版本。我想要做的是当我打电话给www.domain.com或domain.com时它应该从主文件夹获取内容,当我调用demo.domain.com或www.demo.domain.com(子域名)时,我将会能够获得本网站的演示版。我已经制作了一个.htaccess文件,如下所示,并将其放在根文件夹中进行重定向。问题是当我打电话给www.domain.com或domain.com打开主页但所有其他链接(www.domain.com/page)将无效。它的唯一方式是当我将网址设为www.domain.com/main/page时。我已将base_url更改为“www.domain.com”,我对htaccess文件没有太多想法。请帮助我解决这个问题。

RewriteEngine On
RewriteCond %{THE_REQUEST} \ /+main/
RewriteRule ^main/(.*)$ http://domain.com/$1 [L,R=301]
RewriteCond %{THE_REQUEST} \ /+demo/
RewriteRule ^demo/(.*)$ http://demo.domain.com/$1 [L,R=301]
RewriteRule ^(main|demo)/ - [L]
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*)$ /main/$1 [L]
RewriteCond %{HTTP_HOST} ^(www\.)?demo\.domain\.com$ [NC]
RewriteRule ^(.*)$ /demo/$1 [L] 

2 个答案:

答案 0 :(得分:0)

理想情况下,这应该根据最佳实践和性能添加到您的apache配置中,并且看起来如下:

#example demo.domain.com.conf
<VirtualHost 127.0.0.1:80>
    ServerName demo.domain.com
    DocumentRoot /var/www/demo.domain.com/htdocs
 <Directory /var/www/demo.domain.com/htdocs>
    Options All
    Allow from all
    AllowOverride All
 </Directory>
</virtualhost>

#example domain.conf
<VirtualHost 127.0.0.1:80>
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot /var/www/domain.com/htdocs
 <Directory /var/www/domain.com/htdocs>
    Options All
    Allow from all
    AllowOverride All
 </Directory>
</virtualhost>

但是,如果这不是一个选项,并且您的控件仅限于根网站文件夹中的.htaccess,则可以通过添加以下内容将子域代理到演示文件夹:

#Add to .htaccess in web root under IfModule block:
RewriteBase /
RewriteCond %{HTTP_HOST} ^demo\.(.+)$ [NC]
RewriteRule ^(.*)$ http://domain.com/demo/$1 [P]

这假设你的主站点文件夹和演示都有drupal核心。

答案 1 :(得分:0)

谢谢你们,我想通了。这个.htaccess解决了我的问题。

Options -Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^$ main/index.php [L]
RewriteCond %{DOCUMENT_ROOT}/main%{REQUEST_URI} -f
RewriteRule .* main/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* main/index.php?q=$0 [L,QSA]

现在我可以将drupal文件放在名为main的子文件夹中,并且能够从浏览器访问子域demo.subdomain。还需要将$base_url中的settings.php更改为$base_url='www.domain.com'。非常感谢kahthong.com对这个有价值的post