gpt4 book ai didi

php - 如何停止 RewriteEngine/PHP 重定向循环?

转载 作者:搜寻专家 更新时间:2023-10-31 21:28:37 26 4
gpt4 key购买 nike

任务看起来很简单:

所有请求都必须通过一个文件传递。

但是,

将以下代码添加到 httpd.conf 时:

RewriteEngine On  
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?route=$1 [QSA,R=301,L]

并将以下代码添加到/index.php:

if( isset($_GET["route"]) && $_GET["route"] != "/index.php" ){
header("Location: ".$_GET["route"]);
}

然后它会导致重定向循环!

例如这样的循环的原因:

www.site.com/image.jpg ->(由 httpd.conf 重定向)

www.site.com/index.php?route=/image.jpg ->(由 index.php 重定向)

www.site.com/image.jpg ->(由 httpd.conf 重定向)

www.site.com/index.php?route=/image.jpg ->(由 index.php 重定向)

...

所以,问题如下:

如何停止这个循环?

例如以这种方式停止:

www.site.com/image.jpg ->(由 httpd.conf 重定向)

www.site.com/index.php?route=/image.jpg ->(由 index.php 重定向)

www.site.com/image.jpg(无进一步重定向)

最佳答案

这个有点补丁,但我认为它可以工作。

httpd.conf:

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{QUERY_STRING} !^(.*)a=a$ [NC]
RewriteRule ^(.*) index.php?route=$1 [QSA,L]

索引.php:

<?php
if( isset($_GET["route"]) && $_GET["route"] != "/index.php" ){
header("Location: ".$_GET["route"].'?a=a');
}

问题是:重写引擎第一次将页面重定向到 index.php。然后,在 index.php 中有一个重定向到同一个文件,但添加了参数 a=a。然后rewrite engine又来了,但是他命令在查询字符串中找到字符串a=a时不重定向,就没有再重定向了。

当然,这将以 404 错误结束,因为您使用前两个 rewritecond 仅过滤不存在​​的文件,但我想您知道如何处理它。

关于php - 如何停止 RewriteEngine/PHP 重定向循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com