1

我有点卡住了,我确信这是一个微不足道的问题,但似乎找不到正确的解决方案。

我有一个本地开发服务器运行 apache2 w/mod_ssl & mod_rewrite。我创建了一个自签名证书并为 *:443 添加了相应的虚拟主机指令。我似乎遇到的问题是,现在我的 SSL 方面工作正常。当我说得正确时,我的意思是我可以在不添加 index.php 的情况下访问我网站的 https url(例如https://dev.mysite/),它可以很好地提取 index.php。

但是当我访问该站点的常规 http url 时,我必须输入 index.php 才能看到该站点。(例如http://dev.mysite/index.php

我尝试将 DirectoryIndex 指令添加到 *:80 块,但这似乎仍然不起作用。

如果有帮助的话,下面是虚拟主机文件的内容;

ServerName dev.mysite

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/vhosts/bsah_dev/mysite

    <Directory />
            DirectoryIndex index.php
            Options Indexes FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/vhosts/bsah_dev/mysite/>
            DirectoryIndex index.html index.htm index.php
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
            Options Indexes MultiViews FollowSymLinks
            AllowOverride None
            Order deny,allow
            Deny from all
            Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/vhosts/bsah_dev/mysite

    SSLEngine On

    <Directory /var/www/vhosts/bsah_dev/mysite>
            <IfModule mod_rewrite.c>
                    RewriteEngine on
                    RewriteCond %{HTTPS} !^on$ [NC]
                    RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L]
            </IfModule>
    </Directory>

    SSLOptions +StrictRequire

    SSLCertificateFile /etc/apache2/ssl.crt/server.crt
    SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
</VirtualHost>
4

1 回答 1

2

关于您的配置的一些评论,可能会帮助您解决此问题:

<Directory />
        DirectoryIndex index.php
        Options Indexes FollowSymLinks
        AllowOverride None
</Directory>

这很不寻常:通常,您不会授予对根目录(您的机器,而不是文档根目录)的任何访问权限。请参阅Directory documentation,其中建议使用以下内容:

<Directory />
    Order Deny,Allow
    Deny from All
</Directory> 

这应该在您的配置中按预期工作:

<Directory /var/www/vhosts/bsah_dev/mysite/>
        DirectoryIndex index.html index.htm index.php
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
</Directory>

(话虽这么说,只有在没有或先找到index.php时才会使用。)index.htmlindex.htm

DirectoryIndex 文档说它可以放在“服务器配置、虚拟主机、目录、.htaccess”中(参见“上下文”)。它也适用于Directory指令(并且这些值将覆盖您在VirtualHost或服务器级别找到的值)。

HTTPS 部分中的这条规则没有意义:

<Directory /var/www/vhosts/bsah_dev/mysite>
        <IfModule mod_rewrite.c>
                RewriteEngine on
                RewriteCond %{HTTPS} !^on$ [NC]
                RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L]
        </IfModule>
</Directory>

您正在使用重写规则重定向到等效的https://URL。但是,此规则位于启用 SSL 的部分,因此您将重定向 from https://to https://,而不是 from http://

于 2011-06-20T19:39:24.000 回答