我正在尝试映射任何 URL,例如localhost/first
在localhost/first.php
Ubuntu 15.04 上使用 Apache 的 mod_rewrite。
步骤如下。
- 使用(apt-get apache2, php5)安装 Apache2、PHP5,在 Apache 中启用 PHP,因此
phpinfo()
打印正确的信息。 - a2enmod 重写,重启 apache
在 中
/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
.htaccess
在/var/www/html
,RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\.]+)$ $1.php [NC,L]
chmod 644 /var/www/html/.htaccess
- 重启 Apache
但像这样的请求/localhost/second
并不能转化为second.php
。
已编辑
.htaccess
,将最后一行更改为RewriteRule ^second$ second.php
。但仍未成功。在 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 做类似的事情)。