我正在尝试让 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
我不太擅长正则表达式和 mod_rewrite,但看起来 URL 根本没有被重写。
答案1
确保您已mod_rewrite已启用:
以 root 身份:
a2enmod rewrite
然后,以 root 身份重新启动 Apache2:
/etc/init.d/apache2 restart
或者
/etc/init.d/httpd restart
答案2
在 <Directory /var/www/>
指令中AllowOverride None
阻止使用 htaccess 文件。您必须至少将其更改为AllowOverride FileInfo