mod_rewrite,干净的URL和GET参数

时间:2013-12-19 14:26:45

标签: apache .htaccess mod-rewrite parameters get

首先,我想大声道歉 - 我搜索了几十个问题而且我仍然处于完全亏损状态(自学者处于非盈利状态且对PHP知识有限)。

我有这样的网址http://www.welcomedesk.org/index.php?lang=en&page=home (所有链接都重定向到index.php)

我希望它显示为http://www.welcomedesk.org/en/home

我有一个mod_rewrite:     RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?lang=$1&page=$2 [L]

它正在运作!但我不知道如何处理我常用的菜单链接?它们都受此功能的约束:

function redoUrl($addvalues = array())
{
$query = '?';

$keysnew = array_keys($addvalues);
$myget = $_GET;

for ($i = 0; $i < count($addvalues); $i++)
{
    $myget[$keysnew[$i]] = $addvalues[$keysnew[$i]];
}

$keys = array_keys($myget);
$i = 0;
//echo('<pre>'.print_r($addvalues).'</pre>');

foreach($myget as $get_param)
{
    if('' <>$get_param)
    {
        if ($query <> '?') { $query .= '&'; }
        $query .= $keys[$i] . '=' . $get_param;     
    }
    $i++;
}

return basename($_SERVER['PHP_SELF']).$query;
}

我需要更改此功能吗?我是否需要手工重写我的所有链接?

此外,文件名为$page_$lang.inc.php并插入以填充内容,所有内容都位于主文件夹中,但当我访问/en/home时,它假定新文件夹是/ en /且不再找到了什么。 mod_rewrite似乎忘记了/ en /是一个GET参数而只是失去它。

1 个答案:

答案 0 :(得分:0)

是的,您需要更改它,因此它不使用$query。类似的东西:

$uri = '';

$keysnew = array_keys($addvalues);
$myget = $_GET;

for ($i = 0; $i < count($addvalues); $i++)
{
    $myget[$keysnew[$i]] = $addvalues[$keysnew[$i]];
}

$keys = array_keys($myget);
$i = 0;
//echo('<pre>'.print_r($addvalues).'</pre>');

foreach($myget as $get_param)
{
    if('' <>$get_param)
    {
        $uri = $uri . '/' . $get_param;
    }
    $i++;
}

return basename($_SERVER['PHP_SELF']).$uri;
}