Apache2 中的 .htaccess 用于 php url

1 mod-rewrite .htaccess apache2

我想任何URL映射如localhost/firstlocalhost/first.php在Ubuntu 15.04使用mod_rewrite为Apache。

以下是步骤。

  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
    
    Run Code Online (Sandbox Code Playgroud)
  4. .htaccess/var/www/html

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

  6. 重启阿帕奇

但是像/localhost/second这样的请求不会转换为second.php.

  1. 已编辑.htaccess,将最后一行更改为RewriteRule ^second$ second.php. 然而没有成功。

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

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

有人可以帮忙吗?

MrW*_*ite 5

Options Indexes FollowSymLinks MultiViews
Run Code Online (Sandbox Code Playgroud)

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