.htaccess 重写资产目录的规则

.htaccess 重写资产目录的规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在努力做到以下几点: 重定向https://www.example.com/website至https://www.example.com/website2020 获取要显示在我的页面上的图像。在查看页面时,我看到了未显示的断开图像,因为它正在查找位于以下位置的图像:https://www.example.com/website/assets/ ### Redirect seems to be working RedirectMatch 302 (?i)^/website(/

我正在努力做到以下几点:

  • 重定向
    https://www.example.com/website
    https://www.example.com/website2020

  • 获取要显示在我的页面上的图像。在查看页面时,我看到了未显示的断开图像,因为它正在查找位于以下位置的图像:
    https://www.example.com/website/assets/

  •    ### Redirect seems to be working
       RedirectMatch 302   (?i)^/website(/.*)?$ /website2020 
       ### Rewrite rule not working
       RewriteRule  ^/website/assets(/.*)?$  /website2020/assets 
    
    图像已移动到
    https://www.example.com/website2020/assets/

       ### Redirect seems to be working
       RedirectMatch 302   (?i)^/website(/.*)?$ /website2020 
       ### Rewrite rule not working
       RewriteRule  ^/website/assets(/.*)?$  /website2020/assets 
    

    我该如何重写,以便在查看网页时显示图像?

    请尝试以下简单规则:

    RedirectMatch 302 (?i)^/website(/.*)?$ /website2020$1
    

    $1
    是捕获组1的反向引用,即
    (/.*)

    试试这样一个简单的规则:

    RedirectMatch 302 (?i)^/website(/.*)?$ /website2020$1
    

    $1
    是捕获组1的反向引用,即
    (/.*)

    反向回答

  • 获取要显示在我的页面上的图像。在查看页面时,我看到了未显示的断开图像,因为它正在查找位于以下位置的图像:
    https://www.example.com/website/assets/
  • 如果图像已经移动(内部),并且无法修改HTML源代码,则应该考虑为资产实现内部重写,而不是外部重定向。外部重定向将是无望的低效,尤其是当您有许多图像时。(外部重定向仍可用于主URL-请参阅下文。)

    .htaccess
    中,由
    重写规则
    模式匹配的URL路径不以斜杠开头。您也无法复制请求的“资产”(图像)。如果这仅适用于图像(如你所建议的),那么只考虑匹配图像。

    例如,在
    .htaccess
    文件的顶部尝试以下操作:

    RewriteEngine On
    
    # Internally rewrite assets
    RewriteRule  ^website/assets(/.*)?$  /website2020/assets$1 [L]
    
    如果文件后面有其他mod_rewrite指令,则需要使用
    L
    标志

  • 重定向
    https://www.example.com/website
    https://www.example.com/website2020
  • 如果您已经实现了如上所述的内部重写,那么您应该使用mod_rewrite实现重定向,而不是mod_alias
    RedirectMatch
    (稍后执行)

    例如:

    RewriteEngine On
    
    # Redirect everything, except assets
    RewriteCond %{REQUEST_URI} !^/website/assets
    RewriteRule ^website(/.*)?$ /website2020$1 [R=302,L]
    
    # Internally rewrite assets
    RewriteRule  ^website/assets(/.*)?$  /website2020/assets$1 [L]
    

    反向回答

  • 获取要显示在我的页面上的图像。在查看页面时,我看到了未显示的断开图像,因为它正在查找位于以下位置的图像:
    https://www.example.com/website/assets/
  • 如果图像已经移动(内部),并且无法修改HTML源代码,则应该考虑为资产实现内部重写,而不是外部重定向。外部重定向将是无望的低效,尤其是当您有许多图像时。(外部重定向仍可用于主URL-请参阅下文。)

    .htaccess
    中,由
    重写规则
    模式匹配的URL路径不以斜杠开头。您也无法复制请求的“资产”(图像)。如果这仅适用于图像(如你所建议的),那么只考虑匹配图像。

    例如,在
    .htaccess
    文件的顶部尝试以下操作:

    RewriteEngine On
    
    # Internally rewrite assets
    RewriteRule  ^website/assets(/.*)?$  /website2020/assets$1 [L]
    
    如果文件后面有其他mod_rewrite指令,则需要使用
    L
    标志

  • 重定向
    https://www.example.com/website
    https://www.example.com/website2020
  • 如果您已经实现了如上所述的内部重写,那么您应该使用mod_rewrite实现重定向,而不是mod_alias
    RedirectMatch
    (稍后执行)

    例如:

    RewriteEngine On
    
    # Redirect everything, except assets
    RewriteCond %{REQUEST_URI} !^/website/assets
    RewriteRule ^website(/.*)?$ /website2020$1 [R=302,L]
    
    # Internally rewrite assets
    RewriteRule  ^website/assets(/.*)?$  /website2020/assets$1 [L]
    

    请确保在新浏览器中进行测试以避免旧缓存。我在新浏览器中进行了测试,缩略图显示在浏览器上。但是,当我在开发者工具中检查元素时,它仍然有“>。当我右键单击并复制链接地址并将其粘贴到浏览器中时,它可以工作。是否有方法在检查代码时也可以使用a href标记=“>@MoxieC”在“检查代码”时查看所需的URL那么您别无选择,只能更改HTML源代码。@MoxieC:看来您仍在使用缓存页面。在Chrome开发工具中测试,禁用缓存选项,并在网络选项卡中签入您获得的301/302重定向URL。chrome://flags/#enable-强制暗显确保在新浏览器中进行测试以避免旧缓存。我在新浏览器中尝试过,缩略图显示在浏览器上。但是,当我在开发者工具中检查元素时,它仍然有“>。当我右键单击并复制链接地址并将其粘贴到浏览器中时,它可以工作。是否有方法在检查代码时也可以使用a href标记=“>@MoxieC”在“检查代码”时查看所需的URL那么您别无选择,只能更改HTML源代码。@MoxieC:看来您仍在使用缓存页面。在Chrome开发工具中测试,禁用缓存选项,并在网络选项卡中签入您获得的301/302重定向URL。chrome://flags/#enable-强迫黑人有2条规则的真正需要吗?只要
    RewriteRule^website(/.*)$/website2020$1[R=302,L]
    也会重定向
    /website/assets/*
    。@anubhava通常不会,而一次重定向(如您所建议的)就“起作用”。然而,从评论中可以看出,这些图像的旧URL(“缩略图”)仍然存在于HTML源代码中。如果有很多“缩略图”,那么在每个请求上过多的外部重定向是不可取的。因此,如果HTML源中指向这些图像的URL无法更新,那么最好是对这些资产进行内部重写(因此实际上资产没有实际移动)。但是,在HTML中更改URL并实现一个重定向将是最好的选择?只要
    RewriteRule^website(/.*)$/website2020$1[R=302,L]
    也会重定向
    /website/assets/*
    。@anubhava通常不会,而一次重定向(如您所建议的)就“起作用”。然而,从评论来看,似乎旧的