【问题标题】:htaccess redirect rules md5 and keep md5htaccess 重定向规则 md5 并保留 md5
【发布时间】:2020-11-03 17:02:00
【问题描述】:

我有:

https://old.example.com/{md5} 我想转移到一个新域,前提是它是一个 md5 并将这个 md5 作为一个 get 变量 = https://new.example.com/login?md5={md5}

我有以下规则

    RewriteRule ^[a-f0-9]{32}$ https://new.example.com/login$1 [R=301,L]

它工作了一半,如果链在 md5 上但不保留 md5 的值,它会很好地重定向。我认为它缺少(.*)

我必须保留所有其他没有 md5 的页面

https://new.example.com/contact.html
https://new.example.com/bablac/blibli.html

【问题讨论】:

    标签: regex .htaccess rules


    【解决方案1】:
    RewriteRule ^[a-f0-9]{32}$ https://new.example.com/login$1 [R=301,L]
    

    更新:您实际上并没有捕获任何内容,因此$1 反向引用始终为空。您需要在RewriteRule pattern 中创建一个捕获组(即用括号括起来)或使用包含整个匹配项的$0 反向引用。

    您还重定向到/login{md5},而您声明您需要重定向到/login?md5={md5}(以“将此 md5 作为获取变量”),因此您需要将规则的最后一部分调整为阅读/login?md5=$1。换句话说:

    RewriteRule ^[a-f0-9]{32}$ https://new.example.com/login?md5=$0 [R=301,L]
    

    您需要清除浏览器缓存,因为 301(永久)重定向将被浏览器缓存。

    我假设新旧域指向不同的服务器,否则,您可能需要一个条件来明确检查请求的主机名。例如:

    RewriteCond %{HTTP_HOST} ^old\.example\.com [NC]
    RewriteRule ^[a-f0-9]{32}$ https://new.example.com/login?md5=$0 [R=301,L]
    

    【讨论】:

    • 我使用 wget 进行测试。我已经修复了女巫 RewriteRule "^([a-f0-9]{32})$" ()
    • 啊,是的,对不起,错过了!我已经更新了我的答案。您可以改为使用 $0 反向引用(匹配整个模式)而不修改正则表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2011-01-05
    相关资源
    最近更新 更多