.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
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
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通常不会,而一次重定向(如您所建议的)就“起作用”。然而,从评论来看,似乎旧的