错误的$ _GET参数使用MOD重写

时间:2015-04-25 12:57:39

标签: php apache .htaccess mod-rewrite

我想让我的网址更友好,从domain / link / link.php?id = 123到domain / link / 123

我写了以下规则:

RewriteEngine On
RewriteRule ^([^/]*)$ link.php?id=$1 [L]

它位于/ link文件夹中的.htaccess。

在我的link.php文件中,我有:

echo $_GET['id'];

但结果总是" link.php"没有引号,而不是数字或字符串。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

尝试

RewriteEngine On
RewriteRule ^link/([0-9]+)$ link.php?id=$1 [L]

答案 1 :(得分:0)

您已指定它是使用L标志的最后一条规则,但只要请求重写的网址,就会再次重写。

有两种可能的解决方案:

  1. 检查文件是否存在,只有在文件不存在时才重写;
  2. 限制您的重写规则,以便只查找数字。
  3. 第一个选项的示例:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)$ link.php?id=$1 [L]
    

    (请注意,*已将+更改为RewriteEngine On RewriteRule ^(\d+)$ link.php?id=$1 [L] ^^^ Look for 1 or more digits 一个或多个

    第二个选项的一个例子:

    if(turn==true)
    {
    XDO();
    turn==false; // assignment operator should be used turn =false
    
    }
    else if(turn ==false)
    {
    
    ODO();
    turn==true; // assignment operator should be used turn =true
    
    }