【问题标题】:PHP Apache Rewrite Rules and VariablesPHP Apache 重写规则和变量
【发布时间】:2014-12-05 19:33:43
【问题描述】:

我正在尝试从此网址中的变量获取动作值

真实网址

index.php?action=ok&id=45&name=LG-Optimus

友好的网址

home/ok/1/LG-P88

当重定向这样的页面时,上面的友好网址显示

header('Location: /home/ok/' . $id . '/' . $name);

包含获取变量代码的页面脚本

$ok = isset($_GET['ok']) ? $_GET['ok'] : "";
if($ok=='ok'){
    echo "<div class='popup'>";
        echo "<strong>{$card-name}</strong> added!";
        echo "";
    echo "</div>";
}

但我得到'未定义的索引ok'。

.htaccess 文件包含此代码

# Turn Rewrite Engine On
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

# Rewrite for index.php
RewriteRule ^home index.php [NC,L]


# Rewrite for card-name
RewriteRule ^home/([0-9]+)/([0-9a-zA-Z_-]+)$ index.php?action=$1&id=$2&name=$3 [QSA,L]

感谢您的帮助。

【问题讨论】:

    标签: php apache rewrite


    【解决方案1】:

    您将 GET 变量 action 设置为“ok”,但您的代码假定该变量被命名为“ok”。
    要在您的代码中检查它,您应该使用:

    $action = isset($_GET['action']) ? $_GET['action'] : "";
    if($action=='ok'){
    

    另外,你的正则表达式缺少“action”参数,试试这个:

    ^home/(.*)/([0-9]+)/([0-9a-zA-Z_-]+)$
    

    【讨论】:

    • 天哪。我更改了代码,但仍然出现相同的错误 - Undefinex Index。
    • 如果你真的在使用“isset”,那么这个错误应该永远不会出现,这听起来像是你在某处有错字,或者错误在你的代码中的其他地方。
    • 问题在于您的标头位置重定向。这不包含 GET 变量。
    【解决方案2】:

    此代码中有一些错误。使用此代码

    RewriteRule ^home/([a-z]+)/([0-9]+)/([0-9a-z_-]+)$ index.php?ok=$1&id=$2&name=$3 [QSA,L,NC]
    

    同样出于安全原因,您必须避免直接使用 $_GET 。 (see)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-22
      • 2019-03-19
      • 2011-09-02
      • 2011-10-26
      • 1970-01-01
      相关资源
      最近更新 更多