使用.htaccess将404重定向到外部域,保留URI

使用.htaccess将404重定向到外部域,保留URI,.htaccess,redirect,mod-rewrite,http-status-code-404,errordocument,.htaccess,Redirect,Mod Rewrite,Http Status Code 404,Errordocument,在这上面花了一段时间,搜索了很多。找到的问题和答案几乎涵盖了我需要的,但不完全 简而言之:当用户收到404时,尝试将其重定向到外部域,保留URI,仅使用.htaccess 考虑事项: Apache不知道服务器上的文件,它从CMS动态请求它们 请求的URI中可能包含时髦的字符,例如“;”“=” 需要避免任何服务器端脚本(例如php) 所需行为: 用户请求一个URL 服务器以404响应 用户被透明地重定向到外部域,并保留URI 例1: 用户请求:www.example.com/no/Pag

在这上面花了一段时间,搜索了很多。找到的问题和答案几乎涵盖了我需要的,但不完全

简而言之:当用户收到404时,尝试将其重定向到外部域,保留URI,仅使用.htaccess

考虑事项:

  • Apache不知道服务器上的文件,它从CMS动态请求它们
  • 请求的URI中可能包含时髦的字符,例如“;”“=”
  • 需要避免任何服务器端脚本(例如php)
所需行为:

  • 用户请求一个URL
  • 服务器以404响应
  • 用户被透明地重定向到外部域,并保留URI
例1:

  • 用户请求:www.example.com/no/Page
  • 服务器以404响应
  • 用户被重定向到:www.newdomain.com/no/Page
例2:

  • 用户请求:www.example.com/url=xyz
  • 服务器以404响应
  • 用户被重定向到:www.newdomain.com/url=xyz
这只能通过.htaccess实现吗

尝试以下几点:

RewriteEngine On

ErrorDocument 404 /404.html?u=/the/Requested/URI

RewriteCond %{REQUEST_URI} ^/404.html [NC]
RewriteCond %{QUERY_STRING} ^u=(.*)
RewriteRule (.*) http://www.newdomain.com%1? [NC,NE,L,R=301,E=nocache:1]
这主要起作用,但仅适用于硬编码的查询字符串。。。无法动态包含它

如何实现这一点(如果有的话)有什么想法吗

这可以通过,例如

不幸的是,这只适用于Apache>=2.4.13

从2.4.13开始,可以在指令内部使用表达式语法来生成动态字符串和URL

ErrorDocument 404 http://www.newdomain.com%{REQUEST_URI}