php - .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=1
或display.php/1
工作,但没有。
我是.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]
仅供参考:
该标志表示在重写 URI后QSA
附加现有的查询字符串。例子:
网址=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
推荐阅读
- intel - VTune 未正确启动应用程序
- java - 如何将连接池与 Hazelcast jet JDBC 结合使用?
- java - 找不到类 java.util.Timer 的序列化程序
- python - 如何停止使用 Timeloop 包并使用 .vbs 文件中的 pythonw 运行的 python 脚本?
- php - 如何使用phpspreadsheet将pdf文件嵌入到excel工作表中?
- amazon-web-services - 无法在 dockerized jenkins 中运行 kubectl
- c++ - 用 pthread_setname_np 命名 boost::thread?
- php - 如何在PHP中删除数组值中的空格
- node.js - GET http://localhost:3000/hello 404(未找到)
- python - 将矩阵保存到数组中