PHP Apache重写规则和变量

时间:2014-12-05 19:33:43

标签: php apache rewrite

我试图从此网址中的变量中获取操作值

真实网址

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>";
}

但我得到了未定义的索引确定&#39;。

.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]

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您正在将GET变量操作设置为&#34;确定&#34;,但您的代码假设该变量已命名并且#34;确定&#34;。
   要在代码中进行检查,您应该使用:

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

另一件事,你的正则表达式缺乏&#34;动作&#34;争论,试试这个:

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

答案 1 :(得分:0)

此代码中存在一些错误。使用此代码

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

出于安全考虑,您必须避免直接使用$ _GET。 (see