my.domain.com
我有一个指向 Zend Framework 2 应用程序的域,该应用程序/path/to/project/public
具有处理所有请求的.htaccess
和index.php
文件。在/path/to/project/public/blog
,我想拥有一个独立站点,它基本上只是一个index.php
应该独立于站点其余部分的文件。在我启用服务器上的 HTTPS 之前,这一切都运行良好。以下是我的配置。
VirtualHost 配置:
<VirtualHost *:80 *:443>
ServerName my.domain.com
DocumentRoot /path/to/project/public
# SSL configuration
SSLEngine on
SSLProtocol all
SSLCertificateFile /etc/apache2/ssl-certs/publickey.crt
SSLCertificateKeyFile /etc/apache2/ssl-certs/private.key
SSLCertificateChainFile /etc/apache2/ssl-certs/intermediate_ca.crt
<Directory "/path/to/project/public">
DirectoryIndex index.php
Options FollowSymLinks Indexes
AllowOverride All
Order deny,allow
allow from All
</Directory>
</VirtualHost>
/路径/到/项目/公共/.htaccess:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# The following rewrites all other queries to index.php. The
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size
# fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
当我尝试访问 时http://my.domain.com/blog
,我的浏览器被重定向到该页面的 HTTPS 版本,但即使 HTTP 状态代码为 200 OK,也没有显示任何内容。网站的其余部分使用 SSL/HTTPS 运行良好,例如 中的静态文件/path/to/project/public/css/something.css
。
我尝试了各种方法,例如添加虚拟主机别名,但目前没有任何效果。因此,总结一下:我想http://my.domain.com/blog
重定向到https://my.domain.com/blog
并执行/path/to/project/public/blog/index.php
(或该子目录中的任何其他文件),独立于我的网站的其余部分。同时,我想http://my.domain.com/whatever
重定向到https://my.domain.com/whatever
并执行/path/to/project/public/index.php
。
有人知道怎么做吗?我不太擅长 Apache 配置/htaccess,所以越简单越好。提前谢谢!
答案1
尝试使用别名匹配,因为您在同一个虚拟主机上同时使用两者。
AliasMatch ^/blog/ /path/to/project/public/blog/index.php
AliasMatch ^/whatever/ /path/to/project/public/index.php
但是,我想说的是将其隔离:即使用 ssl.conf 进行 ssl 配置,使用 vhost.conf 进行非 ssl 配置。