当请求本地文件时,我希望看到 301 重定向应指向不同服务器上的页面(提供 URL)。这通常可以通过使用简单的Redirect
指令来完成,但这会给我带来一些维护麻烦:它不支持重定向可能经常更改的特定目录下的文件(给定其名称)。对我来说,最好的情况是使用类似于符号链接的东西,并额外支持“链接”到主机外部的 URL。此外,使用 ,Options +Indexes
还可以列出此“重定向”文件。
答案1
这可能会奏效:RedirectMatch 301 .*/<filename> <redirect target>
。
通配符.*
告诉 Apache 将任何内容匹配到实际文件名,因此频繁更改的目录不会成为问题。
如果您需要匹配特定的目录名称,并且您有一个有限的目录列表,则可以在单个规则中列出所有目录名称:RedirectMatch 301 .*/(dir1|dir2|dir3|...)/<filename <redirect target>
。
答案2
将其添加到.htaccess
文件中:
RewriteEngine On
# Makes Apache redirect only if the target file doesn't exist on this server
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^assets/(.*)$ http://your-file-storage.com/$1 [R=301,L]
此配置使所有请求http://your-app.com/assets/*
重定向到http://your-file-storage.com/*
。例如,URLhttp://your-app.com/assets/foo/bar.txt
将重定向到http://your-file-storage.com/foo/bar.txt
。
该^assets/(.*)$
字符串是一个用于测试 URL 的正则表达式。如果 URL 符合正则表达式,则重定向。
字符串http://your-file-storage.com/$1
为重定向目标。 被$1
替换为正则表达式括号内容。
如果需要许多重定向规则,请RewriteRule
向文件中添加许多指令.htaccess
:
RewriteEngine On
RewriteRule ^assets1/(.*)$ http://your-file-storage1.com/$1 [R=301,L]
RewriteRule ^assets2/(.*)$ http://your-file-storage2.com/$1 [R=301,L]
或者,您可以RedirectMatch
在 Apache 配置文件中向虚拟主机配置添加一条指令:
RedirectMatch permanent ^/assets/(.*)$ http://your-file-storage.com/$1
其工作原理是一样的。