首页 > 解决方案 > 整个目录和子目录的 RewriteRule 301 重定向

问题描述

我真的需要你的帮助...

我只是试图将目录中的所有内容重定向到另一个目录。当我读到它时,它看起来很简单,但在现实生活中,它不起作用......这是我现在的整个 .htaccess 文件:

# 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

# Redirect all to HTTPS
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.org/$1 [R]
# End redirect

#301 REDIRECTS
Options +FollowSymLinks
RewriteRule ^mydir/(.*)$ /mydir-and-more/$1 [R=301,NC,L]

所以,真的是这样。我的新目录以与旧目录相同的单词开头。我从那里复制了这一行:https ://coolestguidesontheplanet.com/redirecting-a-web-folder-directory-to-another-in-htaccess/

在 Apache 网站(https://httpd.apache.org/docs/current/mod/mod_rewrite.html)上,它说我应该在 ^ 和 mydir 之间使用 /。试过了,没用。

我尝试在文件顶部移动 Options +FollowSymLinks。没有什么。

当我使用这样的东西时:

RedirectMatch 301 ^/mydir/ https://example.org/mydir-and-more/

这行得通。但只会移动确切的 /mydir/ 地址。它不会移动整个目录。此外,如果我输入https://example.org/mydir时没有最后一个 /,它将无法工作。如果我在重定向匹配中添加 /,它就不再起作用了,因为它是同一个词!

所以,我在这里,完全糊涂了!请问有这方面的高手给点意见吗?谢谢!!

标签: apache.htaccessredirecthttp-status-code-301http-redirect

解决方案


您需要在 wordpress 定义的规则之前移动规则。事实上,如果您尝试访问您的站点,重写规则的制定将在

RewriteRule . /index.php [L]

该指令的意思是“管理所有尚未由上级规则管理的路径并停止细化([L] 代表最后一个)”。

您可以安全地将您的规则置于 wordpress 之上,在 ifmodule 中更好

<IfModule mod_rewrite.c>
RewriteRule ^/mydir/(.*)$ /mydir-and-more/$1 [R=301,NC,L]
</IfModule>

# BEGIN WordPress

推荐阅读