Apache2 DirectoryIndex Проблема - PullRequest
1 голос
/ 20 июня 2011

Я немного застрял и уверен, что это тривиальная проблема, но просто не могу найти правильного решения.

У меня есть локальный сервер разработки под управлением apache2 w / mod_ssl & mod_rewrite. Я создал самоподписанный сертификат и добавил соответствующую директиву виртуального хоста для *: 443. Кажется, у меня проблема в том, что теперь у меня есть правильная работа с SSL. И когда я говорю правильно, я имею в виду, что я могу перейти на URL-адрес https моего сайта (например, https://dev.mysite/) без добавления index.php, и он прекрасно поднимает index.php.

Но когда я захожу на обычный http-адрес сайта, мне нужно ввести 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>

1 Ответ

2 голосов
/ 20 июня 2011

Несколько комментариев о вашей конфигурации, которые могут помочь вам решить эту проблему:

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

Это довольно необычно: обычно вы не предоставляете доступ к чему-либо для корневого каталога (вашего компьютера,не ваш корень документа).См. Справочная документация , в которой предлагается использовать это:

<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.html или index.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, поэтому вы перенаправляете с https:// на https://, а не с http://.

...