使用htaccess和Keep URL重定向子域

时间:2012-08-14 20:00:48

标签: security .htaccess redirect ssl subdomain

我搜索过,当我发现很多线程关闭时,没有一个是我正在寻找的......

在我的网站上,比如example.com,我创建了子域名secure.example.com

此子域名将具有SSL。

我想要做的是将请求重定向到https://secure.example.com/path/到www.example.com/path/,同时保持网址显示为https://secure.example.com/path/

请注意,subdomain.example.com的目的是针对SSL,因此上面的重定向需要使用SSL

我想在htaccess中使用其他一些重定向: 1)将非www重定向到www忽略子域名(因此secure.example.com不会成为www.secure.example.com) 2)将/index.php重定向到/ 3)最后但并非最不重要的是,在secure.example.com上强制使用SSL

此外,购物车软件还有其他功能和搜索引擎优化的htaccess声明,如下所示。

我当前的root htaccess:

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini|log)">
 Order deny,allow
 Deny from all
</FilesMatch>

# Turn Rewrite Engine On
RewriteEngine On

## index.php to root
Options +FollowSymlinks
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.example.com/ [R=301,L] 

## non-www to www ignore subdomains
RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

1 个答案:

答案 0 :(得分:1)

嗯,特别是网址https://secure.example.com/path/显示在http://www.example.com/path/找到的内容,您可以做两件事。最好的办法是,如果2个域名来自同一个文档根目录:

  

它们位于同一主机和同一文档根目录中。子域名实际上是根域设置下的子文件夹,具有子域名。在我的主机的帮助下,我们现在可以正确解析并安装SSL。

子目录可能有问题,因为它可能无法重写其自己的文档根目录的 out 。例如:

  • - &gt;文件根
  • www.example.com - &gt; /路径/到/ htdocs中
  • secure.example.com - &gt; /路径/到/ htdocs中/安全

如果/path/to/htdocs/secure中有.htaccess文件,则会重写https://secure.example.com/的请求。这里的问题是你需要重写到父目录,而apache不会让你这样做。如果是相反的方式,您可以将http://www.example.com/的请求重写为/secure。此外,如果两个域具有相同的文档根,您也可以重写。但是,如果安全是www的文档根目录的子目录,那就不是了。

  

我的主人说安装了mod_proxy。我的Apache配置显示这些已安装:proxy_module(静态)proxy_connect_module(静态)proxy_ftp_module(静态)proxy_http_module(静态)proxy_ajp_module(静态)proxy_balancer_module(静态)

这意味着您至少可以使用P重写标志将请求发送到mod_proxy,因此您可以执行以下操作:

RewriteEngine On
RewriteRule ^path/$ http://www.example.com/path/ [L,P]

在secure.example.com的文档根目录中的htaccess文件中。这只会专门代理URI /path/,而不是/path/foo/bar.html。如果您希望所有内容都以/path/开头,那么您可以匹配它:

RewriteRule ^path/(.*)$ http://www.example.com/path/$1 [L,P]

如果存在重定向问题,您可能需要使用ProxyPass代替:

ProxyPass / http://www.example.com/
ProxyPassReverse / http://www.example.com/

它做同样的事情,除了它重写位置标题,所以重定向也得到代理。