2014-10-19 73 views
1

如果有人请求一个页面,这并不存在,例如,如果其.htaccess的404 - 改

site.com/blabla/?search=blabla 

使用此htacess

ErrorDocument 404/

他们被重定向具有相同的URL的网页, site.com/blabla/?search=blabla 我想要做的是将它们重定向到一个IP,而不是主页。试过这个;

ErrorDocument 404 http://64.233.185.94/ 

但它只是重定向到http://64.233.185.94/ 我想将它与没有找到URL重定向,所以应该在这一点上重定向到

http://64.233.185.94/blabla/?search=blabla 

这样做的正确方法是什么?

回答

1

您将需要使用mod_rewrite规则,而不是ErrorDocument为:

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} !=64.233.185.94 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ http://64.233.185.94/$1 [L,R] 
+0

你试过了吗?它使无限重定向循环 – user198989 2014-10-19 12:48:23

+1

只有当64.233.185.94是与重定向相同的主机的IP时,它才会导致无限循环。那确实是这样吗? – anubhava 2014-10-19 12:49:55

+1

查看更新的规则以避免现在重定向循环。 – anubhava 2014-10-19 12:54:27

1

您可以使用mod_rewrite做到这一点。随着mod_rewrite的,你可以测试是否一个请求的文件或目录是否存在,如果不存在,你可以做一个外部重定向:在测试此按预期工作后

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILNEMAE} !-d 
RewriteRule^http://64.233.185.94%{REQUEST_URI} [R,L] 

更改R标志R=301

+0

R和R = 301的区别是什么,它很重要吗?或者它只是用于搜索引擎? – user198989 2014-10-19 12:32:11

+1

@ user198989 http://devdocs.io/http/rfc2616-sec10#sec10.3.2 – hjpotter92 2014-10-19 12:53:10

+0

301重定向与hjpotter链接是永久性的。通过使用永久重定向,客户端可以预期重定向永不改变,这意味着他们可以(永久)缓存第二个url,并在第一个url的后续请求中加载第二个url。对于搜索引擎,这将防止对重复内容进行处罚。 – Sumurai8 2014-10-20 11:09:39