Назад | Перейти на главную страницу

Что не так с моим файлом httpd.conf?

Я использую Apache 2.2.22 в Ubuntu 12.04 с PHP 5.3.10. Настоящее доменное имя было обфусцировано, чтобы example.com по этому вопросу.

Я пытаюсь установить AllowOverride к None. В настоящее время у меня есть .htaccess файл в моем DocumentRoot. Вот как это выглядит:

<IfModule mod_rewrite.c>

    # Make sure directory listing is disabled
    Options +FollowSymLinks -Indexes
    RewriteEngine on

    # Send request via index.php (again, not if its a real file or folder)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # deal with php5-cgi first
    <IfModule mod_fcgid.c>
        RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
    </IfModule>

    <IfModule !mod_fcgid.c>

        # for normal Apache installations
        <IfModule mod_php5.c>
            RewriteRule ^(.*)$ index.php/$1 [L]
        </IfModule>

        # for Apache FGCI installations
        <IfModule !mod_php5.c>
            RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
        </IfModule>

    </IfModule>

</IfModule>

Я побежал phpinfo() чтобы определить, что мой Server API является Apache 2.0 Handler. Это заставляет меня думать, что мне нужно правило перезаписи RewriteRule ^(.*)$ index.php/$1 [L]. Это правильно?

Я попытался переместить это правило перезаписи в свой sites-available/example.com файл конфигурации, но всякий раз, когда я устанавливаю AllowOverride к None, Я получаю ошибку 500.

Это то, что у меня example.com конфигурационный файл выглядел так:

<VirtualHost *:80>
        ServerName example.com
        ServerAdmin webmaster@localhost

        DocumentRoot /httpd/www/example.com/public
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /httpd/www/example.com/public>
                Options FollowSymLinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /var/log/apache2/example.com-error.log

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

        CustomLog /var/log/apache2/example.com-access.log combined
</VirtualHost>

Приведенная выше конфигурация работает нормально. Я попытался объединить содержимое моего .htaccess файл в мой sites-available/example.com файл. Результаты выглядят так:

<VirtualHost *:80>
        ServerName example.com
        ServerAdmin webmaster@localhost

        DocumentRoot /httpd/www/example.com/public
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /httpd/www/example.com/public>
                Options +FollowSymLinks -Indexes
                RewriteEngine on
                RewriteRule ^(.*)$ index.php/$1 [L]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /var/log/apache2/example.com-error.log

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

        CustomLog /var/log/apache2/example.com-access.log combined
</VirtualHost>

Ух ты. Что за n00b. Вы видите, что я сделал не так? Я уверен.

Может, если поставить RewriteCond и RewriteRule директивы в правильном порядке (RewriteCond приходит ПЕРЕД RewriteRule) ... да, это помогает.