.htaccess 使用htaccess删除.php扩展名后未解析与子文件夹同名的页面

.htaccess 使用htaccess删除.php扩展名后未解析与子文件夹同名的页面,.htaccess,redirect,mod-rewrite,.htaccess,Redirect,Mod Rewrite,因此,我有一个相对简单的站点,其中所有页面都有一个.php扩展名,即about.php、gallery.php等。我还有一个services.php文件,还有一个子文件夹,位于名为services的目录中。为了更清楚,我的结构如下: root | |-index.php |-about.php |-gallery.php |-services.php |-contact.php |-services/ |-service-one.php |-service-two.php |-ser

因此,我有一个相对简单的站点,其中所有页面都有一个.php扩展名,即about.php、gallery.php等。我还有一个services.php文件,还有一个子文件夹,位于名为services的目录中。为了更清楚,我的结构如下:

root
|
|-index.php
|-about.php
|-gallery.php
|-services.php
|-contact.php
|-services/
  |-service-one.php
  |-service-two.php
  |-service-three.php
  |-service-four.php
正如您将看到的,我有一个services.php和services文件夹。在根目录中,我有以下访问权限

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
例如,这允许在不使用.php扩展名的情况下访问about.php,因此其工作原理与about.php相同。但是,当我尝试时,我既没有看到目录列表,也没有看到services.php页面。我得到了以下信息,它提供了一些线索

The requested URL /services/.php was not found on this server.
我无法找到解决此问题的方法,我想知道是否需要/services文件夹中的htaccess


谢谢。

您需要调整您的正则表达式以匹配上一次
/
之前的所有内容:

DirectorySlash Off
Options -MultiViews -Indexes
RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

还要注意
RewriteCond
中的修改,以检查
.php
文件是否存在。

同意。然而,OP规则中的问题不仅仅是相同的文件/目录名。如果请求带有尾随斜杠,例如
/about/
,则请求也将失败。另一个问题是,
RewriteCond
这让我有所收获,谢谢你,但还没有达到我想要的程度。现在,我将在转到时获取目录列表/索引。我尝试了其他一些方法,但都没有效果,解决这个问题的一个方法是在/services文件夹中包含并索引.php文件。然后我可以将services.php内容放在index.php文件中。虽然项目中有两个index.php文件,但听起来有点混乱/危险http://www.domain.com/services那么您想显示
http://www.domain.com/services.php
或希望显示
http://www.domain.com/services/index.php
?放弃index.php的想法。我想展示一下,如果这个URL是肯定的,那就相当不错了!非常感谢你。唯一的问题是localserver()上的主页抛出了一个禁止访问的错误!错误,除非我成功。但是,在live server()上,这是正常的。