重定向子目录中的所有内容,但不重定向子目录本身

Posted

技术标签:

【中文标题】重定向子目录中的所有内容,但不重定向子目录本身【英文标题】:Redirect everything inside subdirectory but not subdirectory itself 【发布时间】:2022-01-22 01:18:02 【问题描述】:

我有一个多语种 wordpress 网站,该网站上线并取代了旧网站。

并非所有语言都已翻译,因此我希望将旧网站与其他语言的 wordpress 一起保留。

example.de -> 新的 wordpress 网站 example.de/zh-hans/* -> 重定向到example.de/cn/ example.de/zh-hans/ -> 重定向到example.de/cn/ example.de/en/* -> 重定向到 example.de/en/ example.de/en/ -> 继续example.de/en/

我的 .htaccess 目前看起来像这样:

Redirect 302 /zh-hans/ /cn/
RedirectMatch 302 ^/(zh-hans)/. /cn/
Redirect 302 /ja/ /jp/
RedirectMatch 302 ^/(ja)/. /jp/
RedirectMatch 302 ^/(en)/. /en/

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

enjpcn 是其中包含 index.html 文件的实际文件夹。对于这些语言,WordPress 使用 enjazh-hans

我对此有一些问题:

    只有 example.de/ja/example.de/zh-hans/ 可以正常工作 example.de/ja(没有结束斜线)和所有其他类似的语言路径只是重定向到example.de/ example.de/enexample.de/en/ 最终进入重定向循环 斜线 (example.de/ja/some-path) 之后和结尾的所有内容均由 wordpress 以 404 页打开

目前我不知道如何处理这个问题,我已经尝试了几个小时的不同组合。

有没有办法通过 .htaccess 来处理这个问题?

【问题讨论】:

【参考方案1】:

尝试用RewriteRules 替换您的Redirects

RewriteEngine on

RewriteRule ^zh-hans/?$ /cn/ [R,L]
RewriteRule ^(zh-hans)/. /cn/ [R,L]
RewriteRule ^ja/?$ /jp/ [R,L]
RewriteRule ^(ja)/. /jp/ [R,L]
RewriteRule ^en$ /en/ [L,R]

我还在某些特定模式中使尾部斜线可选。它现在应该可以工作了。

【讨论】:

以上是关于重定向子目录中的所有内容,但不重定向子目录本身的主要内容,如果未能解决你的问题,请参考以下文章

如何仅重定向子目录而不重定向内容?

让 wordpress 重定向到不同的地方,或者根本不重定向

如何在不重定向原始 URL 的情况下获取短 URL 服务的信息或实际信息

使用 .htaccess 重定向 404 而不重定向尾部斜杠

.htaccess 不重定向到 404.php 而是显示页面名称

sudo 与输出重定向