Я использую 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
) ... да, это помогает.