首页 > 解决方案 > .htaccess 不允许 $_GET 工作

问题描述

我的 .htaccess 文件目前是:

RewriteEngine on
RewriteRule ^display/([0-9]+) display.php?id=$1

但是,在 display.php 中,当我尝试访问$_GET['id'],PHP 说没有值。

目前display.php?id=1工作正常,但display/1不工作。我也试过看看display/id=1display.php/1工作,但没有。

我是.htaccess 的新手,所以我不知道我做错了什么。请帮助,提前谢谢。

标签: php.htaccess

解决方案


您只需要添加“QueryString Append”选项,它:

 RewriteRule ^display/([0-9]+) display.php?id=$1 [QSA,L]

如果它不起作用,请尝试:

 RewriteEngine on
 Options -MultiViews
 RewriteRule ^display/([0-9]+) display.php?id=$1 [L]

仅供参考:

该标志表示在重写 URIQSA附加现有的查询字符串。例子:

网址=http://example.com/foo/bar?q=blah

规则:

RewriteRule ^foo/(.*)$ /index.php?b=$1

结果=/index.php?b=bar

注意它q=blah是如何消失的。因为现有的查询字符串被删除,取而代之的是规则目标中的查询字符串 (b=$1)。现在,如果您包含一个QSA标志:

RewriteRule ^foo/(.*)$ /index.php?b=$1 [QSA]

结果变成=/index.php?b=bar&q=blah

.htaccess 标志列表

  • C(与下一条规则链接)
  • CO=cookie(设置指定cookie)
  • E=var:value(设置环境变量 var 为 value)
  • F(禁止 - 向用户发送 403 标头)
  • G(消失 - 不再存在)
  • H=handler(设置处理程序)
  • L(最后一站处理规则)

最后一条规则:指示服务器在处理完前面的指令后停止重写。

  • N (next - 继续处理规则)
  • NC(不区分大小写)
  • NE(不要在输出中转义特殊的 URL 字符)
  • NS(如果请求是子请求,则忽略此规则)
  • P(代理 - 即 apache 应该获取替换部分中指定的远程内容并返回它)
  • PT(通过 - 在处理带有其他处理程序的 URL 时使用,例如 mod_alias)
  • R(临时重定向到新 URL)
  • R=301(永久重定向到新 URL)
  • QSA(将查询字符串从请求附加到替代 URL)
  • S=x(跳过下 x 条规则)
  • T=mime-type(强制指定mime类型)

有关更多信息,请查看RewriteRule Flags


推荐阅读