regex - .htaccess 论坛软件迁移后的重定向规则
问题描述
我们目前正在升级我们的站点论坛软件,并且需要将所有旧论坛主题 URL 重定向到新格式。
我们已经尝试了几件事,但无法使其正常工作,因为不同的 .htaccess 重定向规则相互冲突。
旧格式: https ://www.example.com/beta/news-and-announcements/1354-thread-name.html
新格式: https ://www.example.com/beta/threads/thread-name.1354/
我们希望这些 301 重定向到新的 URL 结构,以确保一切正常。
news-and-announcements 中的第一个 URL 是一个动态的子论坛名称。1354 是线程 ID - 这确实是唯一需要保留并移至新 URL 的位。线程名称 - 论坛线程名称 - 只要 ID 位于正确的位置,新的论坛软件就会将其重写为正确的。
这是默认的 .htaccess mod_rewrite 部分:
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
我们试图扩展它以涵盖来自旧 URL 结构的一些额外重定向,但它不起作用:
RewriteBase /beta/
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*)\/(\d*)-(.*).html$ threads/$2 [NC,L]
RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
上面的重定向不起作用,并且还会以某种方式破坏 AdminCP URL:
https://www.example.com/beta/admin.php
任何有关使这项工作的帮助将不胜感激!
解决方案
测试一下!
RewriteRule ^news-and-announcements/(\d+)-(.+).html /threads/$2.$1/? [R=301,NC,L]
RewriteEngine On
在.htaccess
文件中添加以下代码
推荐阅读
- python-3.x - 我们如何在运行时为烧瓶 API 分析内存、CPU 负载?
- c++ - 在 2D int 向量上使用 std::fill
- javascript - 我可以将数据(用户名和密码)从我的 .NET Web 应用程序发布到另一个网站以进行登录吗?
- jenkins - Xamarin 为 android 构建 jenkins
- linux - 用于找出过去 24 小时内未生成任何日志的 PID 的 Shell 脚本
- java - 对声明为 final 的 java 变量的操作是在编译时还是运行时计算的?
- c++11 - 如何使用右值调用复制构造函数
- java - File.createNewFile():如何处理“未报告的异常”错误?
- javascript - React Reducer 没有更新状态
- java - 这是编写异步迭代器的正确方法吗?