Я пытаюсь запустить mod_rewrite для одного из моих проектов PHP. К сожалению, это не работает, я всегда получаю 404 ошибки. Мои URL-адреса выглядят так:
http://admin.domain.com/index.php?page=#1&action=#2
Я хотел бы переписать это на указанный выше URL:
http://admin.domain.com/#1/#2/
Есть некоторые особые случаи, например, когда нет никаких действий или не указаны дополнительные параметры.
Вот моя конфигурация виртуального хоста (отредактировал):
<VirtualHost *:*>
ServerName admin.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory "/var/www/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from All
</Directory>
ScriptAlias /awstats/ /usr/lib/cgi-bin/
Alias /awstats-icon/ /usr/share/awstats/icon/
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 /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
Это содержимое .htaccess (в / var / www /):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/$ index.php?page=$1&action=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ index.php?page=$1 [L,QSA]
</IfModule>
А вот вывод журнала ошибок при запросе / home / asdf / или / home /:
[Sat Jun 26 17:46:27 2010] [error] [client ..] File does not exist: /var/www/home
[Sat Jun 26 17:47:09 2010] [error] [client ..] File does not exist: /var/www/home
Я не очень хорошо разбираюсь в regex и mod_rewrite, но похоже, что URL-адрес вообще не переписывается.
Убедитесь, что у вас есть mod_rewrite включен:
Как root:
a2enmod rewrite
Затем перезапустите Apache2 как root:
/etc/init.d/apache2 restart
или
/etc/init.d/httpd restart
В <Directory /var/www/>
директива AllowOverride None
предотвратить использование файла htaccess. Вы должны изменить его на AllowOverride FileInfo