如何使用 htaccess 从 URL 中删除子文件夹
How to remove a subfolder from URL using htaccess
我们有那些 URL:
https://www.example.com/public/something/something
我需要删除 /public/ 子文件夹,这样每个包含此子文件夹的重复项 URL 都将使用 301 重定向重定向到相同的 URL 但没有子文件夹。上面的示例将重定向到:
https://www.example.com/something/something
我试过这个:
RewriteRule ^public/(.*)$ / [L,NC,R=301]
示例仍然是 returns 200. 如何将每个带有 /public/ 的 URL 重定向到同一个没有子文件夹的 URL?如果可能的话,你能解释一下处理它的 .htacces 代码吗?
编辑:我们在服务器上发现了另一个隐藏的 .htaccess 文件,这似乎是我们需要设置的文件。这是它的内容:https://gist.github.com/zatkoma/6425eb2f93c3c6affd46828de044e95b.
我们已经在此处添加了该行,但仍然没有任何反应。我们到底应该把线放在哪里?
谢谢
您的配置有两个问题:第一个是在子文件夹 .htaccess
中时,RewriteRule
pattern 将去除该子文件夹的路径
所以 ^public/
永远不会匹配。
第二个更难一些:您要求您的网站位于 /public
子文件夹中,因此当用户输入 URL 而没有 /public
时,您(在 root htaccess 中)将其重写为 /public/...
但同时你想要,如果有人写 URL 以 /public/
开头,你希望它被删除。
这可以通过检查原始请求(在浏览器中键入)是否包含 /public 来实现。
所以现在流程是:
- 检查请求是否有/public,如果没有则在内部添加,然后去
到 /public (由 htaccess 在 root 中完成)
在 /public
时(因此子文件夹 .htaccess
有效),不要检查请求是否以 /public
开头(因为它总是这样),但检查是否是原始请求(在第 1 步之前)。有 /public
,只有在有的情况下,才重写为 URL 没有 /public
RewriteCond %{THE_REQUEST} \s/public/
RewriteRule (.*) / [L,NC,R=301]
我们有那些 URL:
https://www.example.com/public/something/something
我需要删除 /public/ 子文件夹,这样每个包含此子文件夹的重复项 URL 都将使用 301 重定向重定向到相同的 URL 但没有子文件夹。上面的示例将重定向到:
https://www.example.com/something/something
我试过这个:
RewriteRule ^public/(.*)$ / [L,NC,R=301]
示例仍然是 returns 200. 如何将每个带有 /public/ 的 URL 重定向到同一个没有子文件夹的 URL?如果可能的话,你能解释一下处理它的 .htacces 代码吗?
编辑:我们在服务器上发现了另一个隐藏的 .htaccess 文件,这似乎是我们需要设置的文件。这是它的内容:https://gist.github.com/zatkoma/6425eb2f93c3c6affd46828de044e95b.
我们已经在此处添加了该行,但仍然没有任何反应。我们到底应该把线放在哪里?
谢谢
您的配置有两个问题:第一个是在子文件夹 .htaccess
中时,RewriteRule
pattern 将去除该子文件夹的路径
所以 ^public/
永远不会匹配。
第二个更难一些:您要求您的网站位于 /public
子文件夹中,因此当用户输入 URL 而没有 /public
时,您(在 root htaccess 中)将其重写为 /public/...
但同时你想要,如果有人写 URL 以 /public/
开头,你希望它被删除。
这可以通过检查原始请求(在浏览器中键入)是否包含 /public 来实现。
所以现在流程是:
- 检查请求是否有/public,如果没有则在内部添加,然后去 到 /public (由 htaccess 在 root 中完成)
在
/public
时(因此子文件夹.htaccess
有效),不要检查请求是否以/public
开头(因为它总是这样),但检查是否是原始请求(在第 1 步之前)。有/public
,只有在有的情况下,才重写为 URL 没有 /publicRewriteCond %{THE_REQUEST} \s/public/ RewriteRule (.*) / [L,NC,R=301]