apache - 整个目录和子目录的 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]
- 首先,Wordpress 里面的东西没有弄乱。
- 然后,我从某个站点复制/粘贴的代码将 http 重定向到 https。它运作良好。请注意,我从列表中删除了“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时没有最后一个 /,它将无法工作。如果我在重定向匹配中添加 /,它就不再起作用了,因为它是同一个词!
所以,我在这里,完全糊涂了!请问有这方面的高手给点意见吗?谢谢!!
解决方案
您需要在 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
推荐阅读
- java - 如何使嵌入式 Jpanel 转到 WEST
- macos - 来自 Homebrew 的 gcc-11 Not Found by MacOS - 安装和 $PATH 似乎没问题
- css - 防止徽标出现在 Bootstrap 3.2 中的内容顶部
- python - Beautifulsoup 查找某个孩子下的所有孩子
- python - 获取除 url 中的所有非单词字符
- java - 我在 Android Studio 上的应用无法使用 JVM 1.8 编译
- javascript - DeprecationWarning:消息事件已被弃用。改用 messageCreate
- angular - Angular this.router 即使在构造函数中声明也是未定义的
- node.js - customHooks module.exports 未使用 es6 样式导入
- javascript - 如何过滤和排序嵌套对象?反应JS