Apache htaccess可将子文件夹(第2级)中的文件重写为文件夹(第1级)

Apache htaccess可将子文件夹(第2级)中的文件重写为文件夹(第1级),apache,.htaccess,mod-rewrite,redirect,url-rewriting,Apache,.htaccess,Mod Rewrite,Redirect,Url Rewriting,目前,我正在使用下面的htaccess代码从中加载,从URL中删除文件夹名“/folder/”和文件扩展名“.php” Options +FollowSymLinks RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI}\.php -f [OR] RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI} -d RewriteRule ^(.*)$ /folder/$1.php

目前,我正在使用下面的htaccess代码从中加载,从URL中删除文件夹名“/folder/”和文件扩展名“.php”

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI}\.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI} -d
RewriteRule ^(.*)$ /folder/$1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
现在,我尝试着做几乎相同的事情,但是使用一个存储在子文件夹中的文件

换句话说,我想从

在这种情况下,隐藏扩展文件不是问题,因为上面代码的最后两行是全局工作的,问题在于重写,而仅仅通过添加“子文件夹”名称无法工作。我以为这会奏效,但事实并非如此:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/folder/subfolder%{REQUEST_URI}\.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/folder/subfolder%{REQUEST_URI} -d
RewriteRule ^(.*)$ /folder/subfolder/$1.php [L]

非常感谢您的帮助。

用以下内容替换您的两条规则:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/folder/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /folder/$1.php [L]

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

谢谢你,阿努巴瓦。它不起作用,我用这段代码在两种情况下都得到了404 Not Found错误。是你吗。htaccess不在DocumentRoot中?这个.htaccess有更多的规则吗?是
http://www.domain.com/file
给你404?使用
http://www.domain.com/folder/file.php
?您好。是的,.htaccess位于根域文件夹中。在这个.htaccess中有更多的规则,但是我在文件末尾使用这个规则来避免冲突。htaccess中的其他规则是简单的重写规则,用于将URL从domain.com/index.php?query=hello更改为domain.com/hello。当我使用你给我的密码时。。试试看,我得到了404页。其他一切正常。嗨,阿努巴瓦,对不起,我弄错了。现在可以了。我调用了/subfolder/期望这一个默认加载index.php,例如,我期望调用。它不是那样工作的,但是如果我尝试,它会工作的。我只是想给index.php加上另一个相对的名字。这对我来说也很管用。谢谢你,伙计!实际上,
domain.com/subfolder
如果在这个.htaccess上面添加
DirectoryIndex.php
行,也可以使用