【问题标题】:.htaccess not allowing $_GET to work.htaccess 不允许 $_GET 工作
【发布时间】:2018-11-06 00:57:59
【问题描述】:

我的 .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 的新手,所以我不知道我做错了什么。请帮忙,提前谢谢。

【问题讨论】:

  • 您是否尝试将 [QSA,L] 添加到末尾? QSA 代表查询字符串追加。 L 告诉它只要规则被触发就停止任何后续规则。 RewriteRule ... [QLA]

标签: php .htaccess


【解决方案1】:

你只需要添加“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]

仅供参考:

QSA 标志表示在重写 URI 之后附加现有的查询字符串。示例:

URL=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 设置为值)
  • 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 Flags

【讨论】:

  • QSA 用于组合新旧查询字符串。由于id perameter 已经在重写目标中,因此无需使用 QSA
  • @starkeen 谢谢你的评论,你说得对,但这不会造成任何问题
  • 仍然不起作用我认为我做错了什么。它是说第二个代码 sn-p 找不到文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多