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