2012-05-03 100 views
1

我正在使用htaccess 301永久重定向。 我必须做出对重定向到bima.php我ge.php.so htaccess的写了下面的代码错误301永久重定向

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^bima.php?$ $1/ge.php [NC,R=301,L] 

这部作品properly..whenever我在URL把www.test.com/bima.php它会重定向到www.test.com/ge.php 问题是我必须做一个301重定向为ge.php also.that意味着无论何时www.test.com/gen.php在url它将重定向到www。 test.com/bima.php。 www.test.com/bima.php需要重定向到www.test.com/gen.php,反之亦然。 任何想法?或者无论如何要做到这一点?

+0

约两个ge.php和gen.php?这是一个错字,你实际上使用了两个文件(包括bima.php),或者这是一个包含3个文件的系统? – mishu

+0

显然,我们都同意这是一个无限循环。目标是颠倒这两个,所以去bima.php重定向到ge.php(然后停止)并转到ge.php重定向到bima.php(然后停止)?所以基本上(如果1重定向2 HALT;如果2重定向1 HALT)? – Anthony

+0

有没有人在第一次尝试中正确转到URL的情况?如果没有,那么我认为你已经超越了自己。服务器/浏览器/客户端如何知道它实际上已经成功地到达正确的URL?如果你只是想在加载到bima.php时加载ge.php的内容,那么'Alias'可能是一个更好的解决方案。使用重定向,您实际上是将指令发送到浏览器以发送新请求到新URL,因此循环(因为Apache将其视为新请求)。 – Anthony

回答

0

bima.php重定向到ge.phpge.phpbima.php。这会导致无限循环。你想达到什么目的?你为什么要ge.php重定向到bima.php,反之亦然?

你应该改变你的设计。

1

您重定向规则

RewriteRule ^bima.php?$ $1/ge.php [NC,R=301,L] 
RewriteRule ^ge.php?$ $1/bima.php [NC,R=301,L] 

是重定向在无限循环。删除其中一个。

无论您使用何种类型的逻辑,您尝试的重定向都将一次结束于循环。所以最好避免这种需求。


这里是一个PHP解决方案

文件:ge.php

if($_SESSION['redirected']['from'] != 'bima.php') { 
    header("location: bima.php"); 
    $_SESSION['redirected']['from'] = 'ge.php'; 
    exit; 
} 

文件:bima.php

if($_SESSION['redirected']['from'] != 'ge.php') { 
    header("location: ge.php"); 
    $_SESSION['redirected']['from'] = 'ge.php'; 
    exit; 
} 
+0

我必须重定向bima.php到ge.php和ge.php到bima.php.how可以吗? – asitha

+0

@asitha,我可以为此编写一个难看的解决方案,但请重新考虑,因为这不是您正在寻找的解决方案。 – Starx

+0

@Starx - 我的解决方案能否超出第一个要求?我的意思是,它会重定向x - > y,但然后失败y - > x? – Anthony

0

这里是一个解决方案,但我跟大家同意的基本概念是有点古怪:

RewriteEngine On 
RewriteCond %{ENV:redirected} !=1 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^bima.php?$ $1/ge.php [E=redirected:1,NC,R=301,L] 
RewriteRule ^ge.php?$ $1/bima.php [E=redirected:1,NC,R=301,L] 

通过与重定向设置环境变量,第二重定向不会触发,因为它会看到已经设置了重定向规则。但是,不知道这是否会在初始成功后搞砸重定向。别人知道吗?

+0

无效果................. – asitha

+0

无赖。也许env由于'L'标志而被重置。在Apache 2.0和更早版本中,有一个MaxRedirects选项,在2.4中有一个'END'标志,但我没有看到2.2之间的任何等价物。 – Anthony

+0

@Anthony,使用一个通用的环境变量'redirect',无论如何都不能识别重定向的来源,所以重定向将在第二次停止。 – Starx