我正在使用下面的.htaccess文件从我的文件中删除.php扩展名,并为所有URL添加一个尾部的斜杠:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^/]+)/$ $1.php # Forces a trailing slash to be added RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L]
这是工作很好,但是,当我有一个目录中的PHP文件,我想从一个目录服务该文件,我得到一个404错误。 有没有办法做到这一点在根.htaccess文件。 我真的不想记得在每个目录中放一个.htaccess文件。
马上
www.myexample.com/information/
提供/information.php 。 大! 然而
www.myexample.com/categories/category-1/
即使文件/categories/category-1.php存在,也会抛出404错误。 我想修改我的.htaccess文件,这样服务/categories/category-1.php 。
第一个重写规则的正则expression式是原因: ^([^/]+)/$表示任何字符,除了斜杠/ 。 因此它拒绝位于子文件夹中的任何东西。
您应该使用^(.+)/$模式 – 这将适用于/information/以及/categories/category-1/以及/categories/category-1/hello-kitten/ 。
PS我也将添加L标志停止匹配更多的规则:
# add .php file extension RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*[^/])/?$ $1.php [L]