Apache2 中用于 php url 的 .htaccess

Apache2 中用于 php url 的 .htaccess

我正在尝试映射任何 URL,例如localhost/firstlocalhost/first.phpUbuntu 15.04 上使用 Apache 的 mod_rewrite。

步骤如下。

  1. 使用(apt-get apache2, php5)安装 Apache2、PHP5,在 Apache 中启用 PHP,因此phpinfo()打印正确的信息。
  2. a2enmod 重写,重启 apache
  3. 在 中/etc/apache2/sites-enabled/000-default.conf,在适当的位置添加了以下内容。

    <VirtualHost *:80>
        <Directory /var/www/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    </VirtualHost>
    -- Restart Apache
    
  4. .htaccess/var/www/html

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    
  5. chmod 644 /var/www/html/.htaccess

  6. 重启 Apache

但像这样的请求/localhost/second并不能转化为second.php

  1. 已编辑.htaccess,将最后一行更改为RewriteRule ^second$ second.php。但仍未成功。

  2. 在 Apache error.log 中,我看到以下错误:

    AH00687:协商:发现与请求匹配的文件:/var/www/html/second(无法协商)。

有人可以帮忙吗?

答案1

Options Indexes FollowSymLinks MultiViews

MultiViews选项可能是导致此问题的原因。应将其删除。MultiViews(mod_negotiation 的一部分)将尝试通过测试该目录中找到的各种文件来内部重写对/file(文件系统上存在某些文件/file<.ext>)的请求,并将提供与相应 mime 类型匹配的文件。这种情况会发生mod_rewrite 已经尝试并且可能导致冲突(因为您正在尝试使用 mod_rewrite 做类似的事情)。

相关内容