通过 Htaccess 从 Url 中删除文件夹的子文件夹?

Remove subfolder of a folder from Url by Htaccess?

我有一个这样的URL结构-

https://example.com/文件夹/子文件夹/files.html

我的子文件夹中有很多文件。我想从 URL.

中删除 'subfolder'

我已经尝试了一些 Whosebug 解决方案。但没有成功。

另外请告诉我在哪里粘贴 .htaccess 代码。在位于 'folder' 或 'subfolder'.

中的 .htaccess 文件中

编辑

folder/htaccess

RewriteEngine On

RewriteCond {REQUEST_FILENAME} !-f
RewriteCond {REQUEST_FILENAME} !-d
RewriteRule ^(.+)/?$ /folder/subfolder/ [L]

subfolder/htaccesss

RewriteEngine On
RewriteRule (.+) /folder/ [L,R]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.html-f
RewriteRule ^ %{REQUEST_URI}.html[L]

您可以在 /folder/. htaccess 中使用以下规则:

RewriteEngine On

RewriteCond {DOCUMENT_ROOT}/ -f [OR]
RewriteCond {DOCUMENT_ROOT}/ -d
RewriteRule ^(.+)/?$ /folder/subfolder/ [L]

如果上述规则无效,则使用以下规则

 RewriteEngine On

RewriteCond %{REQUEST_URI} !/folder/subfolder/
RewriteRule ^(.+)/?$ /folder/subfolder/ [L]

记住将规则放在 htaccess 的顶部或其他指令之前,并将其放在 /folder 目录的 htaccess 中。

编辑:

如果您还想将旧网址重定向到新网址,例如 /folder/subfolder/file.html/folder/file.html,请将以下规则放入 htaccess 中 folder/subfolder

RewriteEngine On


RewriteRule (.+) /folder/ [L,R]

请记住将上面的代码放在 subfolder 的 htaccess 中,当您确定规则有效时,将 R 更改为 R=301 以使重定向永久化,因为它避免了搜索引擎中的重复内容问题。

编辑:

如果上述解决方案不适合您,正如您在评论中所说,您会收到 404 重定向错误。错误在那里是因为请求的文件正在被重写为不存在的path/folder/file.html. You can solve this by removing your/folder/subfolder/。 htaccessfile and only use one single htaccess in/folder/` 具有以下内容:

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^subfolder/(.+)/?$ /folder/ [L,R]
RewriteCond %{REQUEST_URI} !/folder/subfolder/
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|gif|png|jpeg)$
RewriteRule ^(.+)/?$ /folder/subfolder/ [L]