我最近购买了一张通配符ssl证书,将我的网站移至https。 由于Apache无法处理多个虚拟主机,在相同的IP下,在不同的s中,我被迫使用mod_vhost_alias中的VirtualDocumentRoot。这首先解决了我使用Apache和通配符证书的问题,但是时间不长。
出于必要,我决定将我网站的主页移动到域的根目录(即http://domain.com,而不是http://www.domain.com)。移动后,我建立的迁移到https的规则会导致服务器无限循环,导致错误500.请注意,应用于任何子域的相同规则仍然有效,将任何http重写为https。
错误:
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary.
我的VirtualHost配置:
<VirtualHost IP:443>
...
VirtualDocumentRoot /.../public_html/%1/
...
VirtualScriptAlias /.../public_html/%1/cgi-bin/
...
</VirtualHost>
我的.htaccess配置:
SetEnv APPLICATION_ENV development
Options +FollowSymlinks -Indexes
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com [NC,OR]
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://domain.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ - [NC,L]
RewriteRule ^(.*)$ index.php [NC,L]
<FilesMatch "\\.(js|css)$">
SetOutputFilter DEFLATE
</FilesMatch>
我的应用程序是使用Zend Framework构建的。
这里的主要谜团是它为什么适用于任何子域,但是当我使用根子域时则不然。什么可能导致问题的暗示?有什么方法可以看到de .htacess的重写吗?
答案 0 :(得分:0)
试试这个:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [L]
的变化:
HTTPS
而不是SERVER_PORT
NC
.*
标记
.htaccess
的其余部分应保持不变(不包括这些部分)。