另一个 mod_rewrite 问题

另一个 mod_rewrite 问题

我正在尝试让 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

相关内容