【问题标题】:Strange issue using Mod_rewrite and $_GET variable使用 Mod_rewrite 和 $_GET 变量的奇怪问题
【发布时间】:2015-03-23 20:13:20
【问题描述】:

在阅读了大量的 SO 问题、询问了朋友等等之后,我来到这里时遇到了一个关于 Apache mod_rewrite 的奇怪问题。

我正在尝试通过 RewriteRule 捕获 http://api.server.com/.../results.php?id=X URL。

你会说很简单,我知道,我的.htaccess文件内容是:

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^results/(.*)$ results.php?id=$1

results.php出于调试原因相当简单,看起来像

    var_dump($_GET);

但是这个脚本总是返回array 0 { }

我是否应该说明我已经尝试清除标志,并由其他人更改 (.*) 类,没有效果。

感谢您的帮助。

【问题讨论】:

  • 将 [QSA] 标志附加到您的重写规则会改变什么吗?另外,您通过什么 URL 访问脚本?
  • 您在浏览器中输入的网址是什么?
  • 你是要捕获 results.php 还是重写 results.php?
  • @T.Fabre [QSA] 标志什么都不做:/ 已经尝试过了。
  • @cmorrissey 提供完整的 URL 是否安全?这是一个经典的 http 请求(可以通过 PM 发送给您)。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

您需要在此处禁用MultiViews 选项:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteRule ^results/(.*)$ results.php?id=$1 [L,QSA,NC]

选项 MultiViews 由运行 before mod_rewriteApache's content negotiation module 使用,并使 Apache 服务器匹配文件的扩展名。所以/file 可以在 URL 中,但它会服务于/file.php

【讨论】:

  • 谢谢@anubhava!奇迹般有效。干杯
【解决方案2】:

您的重写规则与您使用的 URL (http://api.server.com/customer/2/results.php) 不匹配。

根据您的规则和设置,正确的 URL 是:

http://api.server.com/customer/2/results/123

但是,您提到将所有内容都放在 /2/ 文件夹中。如果 2 是您尝试获取的 ID,则它无法工作—— URL 重写仅适用于不存在的路径。

您应该将 .htacess 和 results.php 文件放在客户文件夹中,并使用以下 URL:

http://api.server.com/customer/results/2

或将您的规则和 URL 更改为:

RewriteRule ^([0-9]+)/results$ results.php?id=$1
http://api.server.com/customer/2/results

【讨论】:

  • 哦不!这里 /2/ 是 API 的第二个版本。
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2013-01-17
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多