首页 > 解决方案 > .htaccess 重写以将所有根 URL 重定向到一个新的子目录,除了一个特定的子目录

问题描述

我的 WP 网站有两种语言。默认语言 (EN) 曾经是默认语言,并且是子目录中的第二语言 (NL)。现在默认语言的所有页面和目录也已移动到一个子目录,根 url 只显示一个 splah 页面,您必须在其中选择您的语言。

所以所有的东西都root.com/...应该用 301 重定向规则重定向到root.com/en/...

除了root.com/nl/...应该留在里面的所有东西root.com/nl/...

并且 除了带有剩余语言选择的启动页面root.com

我应该如何在 htaccess 文件中编写重定向规则?

标签: .htaccessurlurl-rewritingrootsubdirectory

解决方案


这实际上应该很简单。

我们使用 RewriteCond 来检查请求的 URL 路径是否不是以/nl/. 将^模式锚定在测试字符串的开头,并!否定它。

在 RewriteRule 模式中,我们要求路径至少包含一个字符。此时前导/已被剥离(仅当在 .htaccess 中配置重写时,如果它是通过中央服务器配置完成的,那将是不同的) - 这意味着,在根目录中请求启动屏幕URL 在这里将是一个“空”路径。通过将模式锚定在开头和结尾,并使用+量词,我们要求路径必须至少包含一个字符,因此如果请求根路径,则此规则将什么也不做。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/nl/
RewriteRule ^(.+)$ /en/$1 [R=302,L]

推荐阅读