.htaccess 不允许 $_GET 工作

Adv*_*tan 5 php .htaccess

我的 .htaccess 文件当前是:

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

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

目前display.php?id=1工作正常但display/1不起作用。我也尝试过看看是否display/id=1有效display.php/1,但没有一个有效。

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

Yus*_*sef 6

您只需要添加“QueryString Append”选项即可:

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

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

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

仅供您参考:

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

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

规则:

RewriteRule ^foo/(.*)$ /index.php?b=$1
Run Code Online (Sandbox Code Playgroud)

结果=/index.php?b=bar

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

RewriteRule ^foo/(.*)$ /index.php?b=$1 [QSA]
Run Code Online (Sandbox Code Playgroud)

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

.htaccess 标志列表

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

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

  • N(下一个-继续处理规则)
  • 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 标志