【问题标题】:Allow PHP to read GET with RewriteRule允许 PHP 使用 RewriteRule 读取 GET
【发布时间】:2022-12-04 08:50:25
【问题描述】:

RewriteRule ^cards/([^/]*)/([^/]*)$ /cards/?name=$1&page=$2 [L]

你好。我的 .htaccess 中有这个。如果我将 ?extra=1 添加到 url 的末尾,然后添加 var_dump,它不会读取 $_GET['extra']; 有没有有效的标志?

我看到 here 一些额外的标志,但在这种特殊情况下似乎没有任何用处。

【问题讨论】:

  • 你不需要执行任何魔法来实现你的要求。那应该开箱即用。如果它对您不起作用,则必须有其他原因。要么没有应用规则,要么应用没有参数的旧版本规则,要么在读取值时出错,要么正在查看缓存的结果。
  • @arkascha 1) 规则确实得到应用,否则我将无法看到页面 2) 我在 .htaccess 中没有看到任何其他“^cards”规则 3) 我 var_dump'd $_GET,我没有知道还能做什么 4) 缓存不会成为问题,因为页面会更新其他所有内容,而且我每次都在按 Ctrl+F5。在另一个浏览器上试过,但没有。我还有其他几条规则。这是一个摘要:ErrorDocument 404 RewriteBase / RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301,NE] ExpiresActive On AddOutputFilterByType DEFLATE AddType 文本/缓存清单 .appcache
  • 我能提供的不多了。也许您想启用重写日志记录。这允许详细了解重写引擎内部发生的事情。

标签: .htaccess


【解决方案1】:

我在这里看到了一些额外的标志,但在这种特殊情况下似乎没有任何用处。

如果您希望原始请求中的查询字符串是合并查询字符串在RewriteRule替代RewriteRule 指令的第二个参数)然后您需要将 QSA flag(查询字符串追加)添加到您的规则中。默认行为是替换中的任何查询字符串都将覆盖请求。

但是,您应该重写处理请求的实际文件,而不是目录(并且大概期望 mod_dir 发出目录索引的内部子请求)。

例如:

RewriteRule ^cards/([^/]+)/([^/]*)$ /cards/index.php?name=$1&page=$2 [QSA,L]

在旁边:我还将第一个量词从 * 更改为 + 因为路径段不能空的规则才能成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多