Apache URL重写为404页

时间:2015-08-11 19:12:53

标签: apache .htaccess mod-rewrite redirect

我们正在移动网络服务器,但所有内容尚未迁移。我想做的是每当有人遇到404时,我都希望将它们重定向到旧服务器,并使用他们尝试的相同路径。

例如:

用户访问:http://new.test.com/department/something.php

这会产生404,所以我想在这里自动发送它们: http://old.test.com/department/something.php

我可以使用.htaccess执行此操作,还是应该在new.test.com上的自定义404页面上使用PHP脚本来执行重定向?

2 个答案:

答案 0 :(得分:1)

您可以在新网站的DOCUMENT_ROOT/.htaccess文件中使用此规则:

RewriteEngine On

# Request is on new host 
RewriteCond %{HTTP_HOST} ^(www\.)?new\.test\.com$ [NC]
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# redirect to old host URL
RewriteRule . http://old.test.com%{REQUEST_URI} [L,NC,R]

答案 1 :(得分:0)

您只需使用ErrorDocument指令:

ErrorDocument 404 http://old.test.com/department/something.php

您可以使用本地路径并发送404状态代码。但是如果你给出一个像上面这样的绝对URI,就会发送302状态代码(临时重定向)。

但这仅适用于固定目标路径。

但您可以分两步使用ErrorDocument选择404请求和以下重定向来发送目标网址:

ErrorDocument 404 /404_to_oldsite/
RewriteEngine On
RewriteRule   ^/404_to_oldsite/  http://master.example.com{REDIRECT_REQUEST_URI}  [R,L]

这需要启用模块mod_rewrite

如果调用某个页面但找不到该页面,则会将其重定向到本地网址,然后将此本地网址重定向到您的旧网站。浏览器应该从那里获取页面。