1 mod-rewrite .htaccess apache2
我想任何URL映射如localhost/first
要localhost/first.php
在Ubuntu 15.04使用mod_rewrite为Apache。
以下是步骤。
phpinfo()
打印正确的信息。在/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).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)chmod 644 /var/www/html/.htaccess
但是像/localhost/second
这样的请求不会转换为second.php
.
已编辑.htaccess
,将最后一行更改为RewriteRule ^second$ second.php
. 然而没有成功。
在 Apache error.log 中,我看到错误:
AH00687:协商:发现文件匹配请求:/var/www/html/second(无协商)。
有人可以帮忙吗?
Run Code Online (Sandbox Code Playgroud)Options Indexes FollowSymLinks MultiViews
该MultiViews
选项可能导致此问题。这应该被删除。MultiViews
(mod_negotiation 的一部分)将尝试通过测试在该目录中找到的各种文件来尝试在内部重写/file
(/file<.ext>
文件系统上存在某些文件)的请求,并将为与适当的 MIME 类型匹配的文件提供服务。这发生在mod_rewrite之前,并可能导致冲突(因为您正在尝试使用 mod_rewrite 做类似的事情)。