以下内容.htaccess
要重写示例。。。
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^\\/]*/.*$
RewriteRule ^(.*)$ http://example.com/$1 [QSA,L]
请注意。。。这将导致外部重定向(就像
R=302
已包含在
RewriteRule
指令),而不仅仅是;“重写”;(如建议的那样)-即使没有
R
旗帜因此,浏览器将对uploads目录中的每个资源发出两个请求。在本地测试环境中开发时,这可能是可以的(正如您所做的),但在生产中您永远不会做这样的事情,因为如果您有许多外部资源,它可能会让您的站点陷入停顿。(要正确执行此操作,您需要将服务器配置为反向代理,并使用mod\\u proxy“代理”请求。)
如果在RewriteRule
替换然后Apache将隐式触发外部重定向。
使上述目标成为特定领域(例如。local.example.com
), 您只需要添加一个附加条件来检查Host
标题。例如:
RewriteCond %{HTTP_HOST} ^local\\.example\\.com
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^/]+/
RewriteRule (.*) http://example.com/$1 [R,QSA,L]
关于上述内容的一些注意事项:
(.*)
与相同^(.*)$
- 不需要锚同样地,.*$
(它只是匹配URL末尾的任何内容)是多余的无需在字符类中使用反斜杠转义斜杠:[^/]
与相同[^\\/]
.匹配路径段中的1个或多个字符,而不是0个或多个字符。ie。[^/]+
而不是[^/]*
.我添加了R
, 因为你最好弄清楚到底发生了什么但是,你实际上不需要第二个RewriteCond
与REQUEST_URI
. 将其移动到RewriteRule
模式,自RewriteRule
<首先处理em>图案。例如,上述内容可以重写为:RewriteCond %{HTTP_HOST} ^local\\.example\\.com
RewriteRule ^wp-content/uploads/[^/]+/ http://example.com%{REQUEST_URI} [R,QSA,L]