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

时间:2016-05-26 05:27:06

标签: .htaccess redirect mod-rewrite http-status-code-404 errordocument

花了一段时间对此进行了搜索并进行了大量搜索。找到了几乎涵盖我需要的问题和答案,但并不完全......

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

考虑:

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

必需的行为:

  • 用户请求网址
  • 服务器以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]

这主要是有效的,但只有硬编码的查询字符串...才能动态地包含它。

任何想法如何实现这一点(如果有的话)?

1 个答案:

答案 0 :(得分:2)

可以使用ErrorDocument完成此操作,例如

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

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

  

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