我最近购买了通配符 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 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 框架构建的。
这里的主要谜团是为什么它适用于任何子域,但当我使用根子域时却不行。任何可能导致问题的提示?有什么办法可以让我看到 .htacess 所做的所有重写?