使用 apache2 和 HTTPS 配置子目录

使用 apache2 和 HTTPS 配置子目录

my.domain.com我有一个指向 Zend Framework 2 应用程序的域,该应用程序/path/to/project/public具有处理所有请求的.htaccessindex.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 配置。

相关内容