【问题标题】:Why is my variable not being put into $_GET?为什么我的变量没有被放入 $_GET?
【发布时间】:2009-06-16 10:52:17
【问题描述】:

也许我错过了什么,但我似乎无法弄清楚这一点。

我有一个 ReWriteRule:

RewriteRule ^view/(\w+)$ view.php?mmdid=$1 [L]

当我访问 mydomain.org/view/3 时,$_GET 数组为空。没有键“mmdid”。

但是,当我将规则更改为其他内容时,例如:

RewriteRule ^viewz/(\w+)$ view.php?mmdid=$1 [L]

当我访问 mydomain.org/viewz/3 时,它运行良好。打印 $_GET 时得到 Array ( [mmdid] => 1 )。

没有其他类似的规则可能会发生冲突,我已经重新启动了 apache。

关于为什么会发生这种情况的任何想法? 'view' 是关键字还是什么?

这是重写日志的内容:

192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a61030/subreq] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] add path info postfix: /path/to/webroot/view.php -> /path/to/webroot/view.php/1
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php/1 -> view.php/1
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] applying pattern '^(.*)$' to uri 'view.php/1'
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (4) [perdir /path/to/webroot/] RewriteCond: input='mydomain.org' pattern='^www\.mydomain\.org$' => not-matched
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2930e58/subreq] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/1

这是仅使用 ^v/(\w+)$.... 时的日志输出。

192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] add path info postfix: /path/to/webroot/v -> /path/to/webroot/v/1
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/v/1 -> v/1
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] applying pattern '^v/([0-9]+)$' to uri 'v/1'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (2) [perdir /path/to/webroot/] rewrite 'v/1' -> 'view.php?mmdid=1'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) split uri=view.php?mmdid=1 -> uri=view.php, args=mmdid=1
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] add per-dir prefix: view.php -> /path/to/webroot/view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (2) [perdir /path/to/webroot/] strip document_root prefix: /path/to/webroot/view.php -> /view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (1) [perdir /path/to/webroot/] internal redirect with /view.php [INTERNAL REDIRECT]
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php -> view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] applying pattern '^v/([0-9]+)$' to uri 'view.php'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php -> view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] applying pattern '^(.*)$' to uri 'view.php'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (4) [perdir /path/to/webroot/] RewriteCond: input='mydomain.org' pattern='^www\.mydomain\.org$' => not-matched
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php

谢谢,

【问题讨论】:

    标签: php mod-rewrite url-rewriting


    【解决方案1】:

    也许您的脚本名称与重写冲突。尝试将您的脚本重命名为 view.page.php,毕竟如果您正在重写它,那么脚本的名称并没有什么区别。

    有关如何调用脚本的更多信息,请使用

    var_dump($_SERVER);
    

    【讨论】:

    • 做到了!谢谢你。甚至没有想到这一点。为什么不能将脚本命名为与规则相同的名称?任何人都可以对此有所了解吗?
    • 对某些人来说,这可能会有所作为,因为它可以让 webroot 中的内容更有条理。
    • 重命名文件是消除症状而不是消除原因。这不是一个好的解决方案。
    • @Gumbo - 我同意,我想我不明白为什么你不能给他们起同样的名字。我发布了一个答案,如果有人有任何进一步的见解,他们可以在那里发表评论。谢谢!
    • @Gumbo - 我也同意。 @Vinko 对 MultiViews 的影响有一定的了解(也许更值得得到答案)。如果这确实是问题所在,那么重命名脚本是一个有效的解决方案。
    【解决方案2】:

    'view' 无论如何都不是关键字或保留字。

    (删除了引导我们解决问题的调试信息)

    仔细查看重写日志,我看到了这一行:

     applying pattern '^(.*)$' to uri 'view.php/1'
    

    那一行显示你启用了MultiViews(因为你的请求不是view.php/1,而是view/1),所以view/在进入重写引擎之前被内部转换为view.php/,因为有一个文件具有相同的名称和已知的扩展名。您可以为该文件或目录禁用 MultiView,或者更改脚本或目录的名称,以免触发 MultiView。

    【讨论】:

    • 我已经发布了日志@级别9的输出,清除了其他规则并请求了一次页面。
    • 是的,我有以下 2 条规则来删除 www:RewriteCond %{HTTP_HOST} ^www\.mydomain\.org$ RewriteRule ^(.*)$ mydomain.org/$1 [R=301,L]
    【解决方案3】:

    可能是MultiViews 导致了这种行为。尝试禁用它:

    Options -MultiViews
    

    【讨论】:

      【解决方案4】:

      我认为,对于 RewriteCond 问题,Vinko 是正确的。您的“视图”重写规则有一个未满足的条件,因此甚至从未对其进行测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 2014-08-23
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多