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



我有一个类似这样的URL结构-

https://example.com/folder/subfolder/files.html

我在子文件夹中有许多文件。我想从URL中删除"子文件夹"。

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

另外,请告诉我在哪里粘贴.htaccess代码。位于"folder"或"subfolder"中的.htaccess文件中。

编辑

文件夹/htaccess

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

子文件夹/ht访问

RewriteEngine On
RewriteRule (.+) /folder/$1 [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}/$1 -f [OR]
RewriteCond {DOCUMENT_ROOT}/$1 -d
RewriteRule ^(.+)/?$ /folder/subfolder/$1 [L]

如果上述规则不起作用,则使用以下

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

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

编辑:

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

RewriteEngine On

RewriteRule (.+) /folder/$1 [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/$1 [L,R]
RewriteCond %{REQUEST_URI} !/folder/subfolder/
RewriteCond %{REQUEST_URI} !.(css|js|jpg|gif|png|jpeg)$
RewriteRule ^(.+)/?$ /folder/subfolder/$1 [L]

最新更新