微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是redirect://在PATH_TRANSLATED中?

我有一个.htaccess规则,将/ category / category-slug /的请求传递给category.PHP 。 但是,当我检查$_SERVER超全球,我得到这个条目:

Array ( [PATH_TRANSLATED] => redirect:// )

那是什么? 我从来没有见过redirect://之前。

这是相关的.htaccess规则:

RewriteRule ^category/([^/]+)/?(.*) /category.PHP?cat=$1&page=$2 [L,QSA]

因此,我没有在我的脚本中填充$_GET['cat']或$_GET['page'] ,因为它似乎来自redirect,而不是简单地重写请求。 这是怎么回事?

Mod_Rewrite意外的行为L标志

权限设置为777,文件仍然不可写入

如何使用Apache / mod_rewrite基于Accept-Language进行redirect

Apache RewriteRule删除任何域名上的端口

mod_rewrite VS相对path

如何在不改变相对path的情况下使用Apache的mod_rewrite rewriterule

PHP方法=“后”停止工作后,我添加了这个.htaccess …为什么?

将所有的请求mod_rewrite到子目录

Codeigniter 3删除index.PHP问题

HTTPS强制redirect不能在wordpress中工作

我发现了一个关于似乎是同一个问题的Apache错误报告(40781) 。 引用Bob Ionescu的评论

“问题是主请求的uri = path_info的子请求(为了获得path_translated,即path_info的物理路径视图)再次在每个目录上下文中重新匹配RewriteRule并且匹配;因此没有物理路径。

为什么在Apache 2.0中不会发生这种情况? 答案很简单:mod_rewrite不会在2.1版以前的每个目录中的子请求中执行。 NS标志防止在子请求中处理RewriteRules。“

注释表明你应该能够通过在你的RewriteRule包含[NS]标志来解决这个问题,除非你明确地希望它们也适用于子请求。

$_SERVER中的PATH_TRANSLATED是您的服务器的一个环境变量,由PHP根据一些标准规则导入$_SERVER超全局变量。 所以环境变量是相似的,如果不是相同的名字。

只有通过环境变量的名称,不能说什么设置这个值,但是你的问题的上下文表明它已经由Aapache HTTPD web服务器设置。

PHP文档说明如下:

PHP以前的行为是将PATH_TRANSLATED设置为SCRIPT_FILENAME ,并且不理解PATH_INFO。 […]您应该修复脚本以使用SCRIPT_FILENAME而不是PATH_TRANSLATED 。

另外请参阅$_SERVER注释略有不同:

在服务器完成任何虚拟到实际的映射之后,文件系统(不是基于文档根目录的)到当前脚本的路径。

注意:PHP 4.3.2开始,与Apache 1中的情况相比,PATH_TRANSLATED不再隐式设置在Apache 2 SAPI的情况下,而Apache 1不会将其设置为与SCRIPT_FILENAME服务器变量相同的值。 这个改变是为了符合CGI规范,PATH_TRANSLATED应该只在PATH_INFO被定义时存在。 Apache 2用户可以使用httpd.conf中的 AcceptPathInfo = On来定义PATH_INFO。

所有的$_SERVER变量都是从环境中读取的。 在Apache + mod_PHP的情况下,这个环境是由Apache服务器定义的。

说实话,我要么没有看到redirect://到目前为止。 你确定,你的请求符合这个重写规则而不是另一个

我认为mod_rewrite是你必须寻找一个错误的地方。

您可以通过启用日志来调试mod_rewrite的功能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐