使用.htaccess删除文件扩展名,但也允许设置主页

时间:2014-12-10 02:40:32

标签: php .htaccess

我在使用.htaccess文件时遇到问题。我已经创建了文件并进行了设置,因此我不必在URL中键入文件扩展名。不幸的是,这造成了一个新问题。我曾经能够键入localhost / project,它会显示index.php。但是现在如果我键入localhost / project它会显示服务器错误500.有谁知道如何解决这个错误?

.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

1 个答案:

答案 0 :(得分:1)

您还需要使用请求文件检查!-d,也可以添加所有正确的条件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

问题是/project是一个目录,mod_dir会自动将其重定向到/project/,并且与第一个规则匹配,因此转为/project.php,而不是{{1}}。 ta文件。