Apache .htaccess服务于根目录中的所有内容

Apache .htaccess服务于根目录中的所有内容,apache,.htaccess,Apache,.htaccess,我需要在不更改url的情况下从根目录获取传入url并为它们提供服务 因此,如果有人输入: http://example.com/randomdirectory/page.html 它会被端上来的 http://example.com/page.html但url不会更改 我觉得我很接近下面的内容,但是当url以斜杠结尾时,它失败了;我想为索引服务 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f Rewr

我需要在不更改url的情况下从根目录获取传入url并为它们提供服务

因此,如果有人输入:
http://example.com/randomdirectory/page.html

它会被端上来的

http://example.com/page.html
但url不会更改

我觉得我很接近下面的内容,但是当url以斜杠结尾时,它失败了;我想为索引服务

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

本质上,我只想提供相同的文件(在根目录下),不管用户键入什么。

您可以使用此规则:

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

它工作得很好。非常感谢你。如果您有时间,也不介意,您能解释一下规则的各个部分在做什么吗?
(.+)/
匹配URL中最后一个
/
的所有内容,
(.*)
匹配最后一个部分。然后它是我们使用的目标
/$2
,这是第二个捕获组的反向参考,在
/
之前
/$2
确保它被路由到网站的根目录。我查找了它。我很好奇
(.+)
在做什么。伙计,我是如此接近。再次感谢@anubhava。很抱歉把这个带回来。如果用户输入类似
http://example.com/something
-排除尾随斜杠。我尝试将尾随斜杠设置为可选,但后来意识到我们正在将所有内容匹配到最后一个
/
,并使用第二个捕获组。我是否需要在当前规则的基础上创建一个新的重写规则来检查是否缺少
/
?我的结论是:
RewriteCond%{REQUEST\u FILENAME}-f
重写条件%{REQUEST_URI}!(.*)/$
RewriteRule^(.*)$/$1/
RewriteCond%{REQUEST\u FILENAME}-d
重写cond%{REQUEST_FILENAME}-f
重写规则^(+)/(.*)$/$2[L]