跳转到主要内容
小白 提交于 14 October 2012

原文地址:http://drupal.org/node/1804604

理解这篇文章需要知道一些其他的东西。除非你真的知道自己在干什么,不然不要试图使用复制粘贴解决问题。 在Drupal7中,我是使用下面的方法设置在后台使用https链接同时在前台使用http链接。以下代码适合于当Drupal安装在子目录或子域名时,设置对后台启用https(SSL)链接同时对前台启用http链接 ,同时也是简洁链接。 首先,在settings.php设置:

if ($_SERVER['SERVER_PORT'] == 443) {
$base_url = 'https://address_1.com/subdirectory';
} else {
$base_url = 'http://subdomain.address_2.com';
}
第一个$base_url指的是管理后台的路径。第二个是网站前台的路径。这段代码是检测我们输入的路径,决定启用https或者http链接。 当你没有启用简洁链接的时候,这段代码会工作的非常好,如果启用了简洁链接,它却不会正常工作了~。关键是我们没有设置rewritebase,但是如何设置rewritebase呢?如果对后台设置子目录,那么前台就会报错。如果对前台设置,后台就会报错。如果什么都不设置的话,前台可以正常工作~后台就坑了。查看了Drupal文档之后,可以使用下面的方法解决问题: 查看你的.htaccess文件,将以下的代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
替换为以下的代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/subdirectory/(.*)$
RewriteRule ^(.*)$ /subdirectory/index.php?q=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
这些规则的顺序很重要,不然无法正常工作。 这样你就可以在启用简洁路径的前提下对前台使用http链接同时对后台启用https链接了。