【问题标题】:Replace specific part of the domain leaving the rest untouched替换域的特定部分,其余部分保持不变
【发布时间】:2021-11-24 22:21:05
【问题描述】:

我想重写 URL 的特定部分,同时保留其余部分,更准确地说是扩展。

my.domain.co/posts/something

my.domain.ai/posts/something

我尝试了很多建议,但总是遇到死胡同。我在阅读重定向指南时设法做的一件事就是这个,但它不起作用。我基本上想用.ai替换.co

RewriteCond %{HTTP_HOST} ^([^.]*\.)?my.mydomain.co$
RewriteRule ^(.*) https://%my.mydomain.ai/$1 [R=301,L]

我错过了什么?

【问题讨论】:

    标签: .htaccess url mod-rewrite url-rewriting


    【解决方案1】:
    RewriteCond %{HTTP_HOST} ^([^.]*\.)?my.mydomain.co$
    RewriteRule ^(.*) https://%my.mydomain.ai/$1 [R=301,L]
    

    鉴于您发布的示例,这比它需要的更复杂。您的示例不包含任何其他子子域,那么您为什么在正则表达式中允许这样做? susbtitution 字符串中还有一个错误的 %

    只需要以下内容:

    RewriteCond %{HTTP_HOST} ^(my\.domain)\.co [NC]
    RewriteRule (.*) https://%1.ai/$1 [R=301,L]
    

    此规则接近您的 .htaccess 文件的顶部。

    %1 反向引用包含 my.domain,从前面的 CondPattern 捕获 - 这只是为了节省重复。

    您需要在测试前清除浏览器缓存,因为任何错误的 301(永久)重定向都会被浏览器缓存。

    首先使用 302(临时)重定向进行测试以避免潜在的缓存问题。

    【讨论】:

    • 在 .htaccess 文件中的 RewriteEngine On 之后添加,但它返回内部服务器错误。据我了解, ^ 从 (my\.domain) 创建某种变量,然后将其替换为 %1 附加 .ai 并将其余 url 替换为 $1 逻辑在那里,但它返回 Internal Server Error
    • @GorastCvetkovski 啊,抱歉,正则表达式中有错字! (我已经在我的回答中更正了)。它应该是^(my\.domain)\.co,而不是^(my\.domain\).co - 注意最后一个斜杠的位置,在点之前,而不是在右括号之前。
    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2023-03-14
    相关资源
    最近更新 更多