首页 > 解决方案 > 将根域重定向到子文件夹

问题描述

这是我们当前的 .htaccess 文件,其中包含我们需要保留的规则,但我们还需要添加一个从根域重定向到子文件夹 URL 的新规则 example.com -> example.com/fl/en.html

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.co\.nz$
RewriteCond %{REQUEST_URI} !^/subfolder [NC]
RewriteRule ^(.*)$ /subfolder/$1 [L]

RewriteEngine on
RewriteCond %{REQUEST_URI} ^(/home.html|/info.html|/flash|/external)
RewriteRule (.*) http://example.com/fl/en.html [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

# END WordPress

标签: .htaccessredirect

解决方案


只要您将指令放在正确的位置,似乎没有什么特别的要求。要将文档根 (for example.com) 重定向到/fl/en.htmlin.htaccess可以这样做:

RewriteRule ^$ /fl/en.html [R,L]

这只需要在为主机重写所有内容的指令之后domain.co.nz以及您的前端控制器之前进行。(您可以将其与您现有的重定向 , 等指令结合起来/home.html/info.html

您现有的规则可以进一步优化。与其在RewriteCond指令中检查请求的 URL 路径并允许在模式中的所有内容通过,不如先在模式RewriteRule 做你能做的事情更有效(因为这是首先处理的内容)。RewriteRule

此外,由于您使用的是 WordPress,因此您添加的任何自定义指令都.htaccess应该在该# BEGIN WordPress部分之外。WordPress 本身维护此部分,因此您所做的任何手动自定义都可能在更新期间被覆盖。

此外,无需重复该RewriteEngine指令。(该指令的最后一个实例胜出并控制整个文件。)

所以,把所有这些放在一起,我们有类似的东西:

# Rewrite all requests for domain.co.nz to subfolder
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.co\.nz$
RewriteRule !^subfolder /subfolder%{REQUEST_URI} [L]

# Redirect document root to /fl/en.html
RewriteRule ^$ /fl/en.html [R,L]    

# Redirect specific paths to /fl/en.html
RewriteRule ^(/home.html|/info.html|/flash|/external) /fl/en.html [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]    
</IfModule>    
# END WordPress

请注意,上述指令(带有单个R)是临时(302)重定向。将其更改为R=301是否打算永久保存,但只有在您测试它工作正常(以避免缓存问题)之后。

与往常一样,请确保您在测试前已清除浏览器缓存。


推荐阅读