htaccess-重定向到同一域时循环

时间:2018-07-05 09:03:06

标签: .htaccess loops

我想为新项目中的人们做准备,所以我想在给定日期之前访问一个登陆页面,然后必须将其重定向到整个网站。

在给定日期之前: 网站任何页面(甚至/)的每次调用都必须暂时重定向到/promo/index.php

在相同的给定日期之后: 每次对/ promo / *的调用都必须重定向到网站的根目录/

我从这样的第一条规则开始:

RewriteCond %{TIME} <20180705095200 [NC]
RewriteRule ^$ /promo/index.php [R=301,L]

=>在日期之前:它可以很好地将根/重定向到promo / index.php,但是如果我尝试/ Home,它不会重定向到promo

我也尝试过:

RewriteCond %{TIME} <20180705095200 [NC]
RewriteRule ^(.*)$ /promo/index.php [R=301,L] # LOOPS

=>在日期之前:显然,它会将每个URL重定向到/promo/index.php,但似乎也将/promo/index.php自身重定向到它自己(它向我抛出ERR_TOO_MANY_REDIRECTS)。

然后我尝试关闭所有其他规则以进行测试,并且循环继续抛出...

  

编辑2 *

感谢FoxyFish,我现在有以下代码:

RewriteCond %{REQUEST_URI} !/promo/index.php$ 
RewriteCond %{TIME} <19800705095200 [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(jpe?g?|gif|png|js|css|ttf|ico|json) [NC]
RewriteRule ^(.*)$ /promo/index.php [R=301,L]

RewriteCond %{TIME} >19800705095200 [NC]
RewriteRule /promo/index.php$ / [R=301,L]

但是“ After”效果(:p)不起作用... 我的意思是:在到期日期之后,/ promo / index.php不会重定向到/。仍然可以访问。

  

编辑3 *

这是我的最终解决方案

RewriteCond %{REQUEST_URI} !/promo/index.php$ 
RewriteCond %{TIME} <19800705095200 [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(jpe?g?|gif|png|js|css|ttf|ico|json) [NC]
RewriteRule ^(.*)$ /promo/index.php [R=301,L]

RewriteCond %{TIME} >19800705095200 [NC]
RewriteRule ^promo/index.php$ / [R=301,L,NC]

谢谢FoxyFish !!!!!!

PD:麻烦的是例如重写/ Countdown上的/promo/index.php。

1 个答案:

答案 0 :(得分:2)

RewriteCond %{REQUEST_URI} !/promo/index.php$ 
RewriteCond %{TIME} <20180705095200 [NC]
RewriteRule ^(.*)$ /promo/index.php [R=301,L]

这应该防止促销页面本身被重定向重定向。

  

Edit1 *

为防止其他事情被重定向所需,只需使用以下条件...

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(jpe?g?|gif|png|js|css|ttf|ico|json) [NC]

只需根据需要在列表中添加或删除扩展名即可。

  

Edit2 *

使用单独的条件/规则,该条件/规则将在促销到期后立即生效。

RewriteCond %{TIME} >20180705095200 [NC]
RewriteRule ^promo/index.php$ / [R=301,L,NC]