我有一个类似这样的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]