如何将对特定文件的请求重定向至其他服务器托管的页面?

如何将对特定文件的请求重定向至其他服务器托管的页面?

当请求本地文件时,我希望看到 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

其工作原理是一样的。

相关内容