【问题标题】:Why POST don't work with some rewrite conditions in htaccess?为什么 POST 不适用于 htaccess 中的某些重写条件?
【发布时间】:2020-11-18 23:11:42
【问题描述】:

所有 $_POST 都不适用于此 .htaccess 代码:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

// ========================== this code too is in place, but it seems not to impact on $_POST
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
// =================================================

知道为什么会出现这样的问题吗?对于 php 扩展,我该怎么做才能解决并获得相同的结果?

【问题讨论】:

  • R=301 是一个重定向。如果您向该 URL 发送 POST 请求,Web 服务器会将请求(使用 GET)重定向到新 URL,并且所有发布的数据都将被删除(因为 GET 请求不支持请求正文中的任何内容)。第二条规则是重写,它与重定向不同。您可以在此处了解更多差异:stackoverflow.com/a/12399668/2453432
  • 您可以尝试改用R=308。这也是一个永久重定向,但它告诉客户端使用相同的 http 方法。但不确定它的使用/实施范围有多广。
  • @Magnus - 你的建议有效。但是关于你所说的,你会期待任何“附带效应”吗?
  • 不,不是。如果有人对此有问题,那主要是写得不好的客户没有遵循标准,老实说,我们不应该关心这些。
  • @MagnusEriksson 您应该将其添加为答案。此外,OP 不应首先向非规范 URL 发送 POST 请求。 (广泛支持 308。)

标签: php .htaccess post mod-rewrite


【解决方案1】:

R=301 是一个重定向。如果您向该 URL 发送 POST 请求,Web 服务器会将请求(使用 GET)重定向到新 URL,并且所有发布的数据都将被删除(因为 GET 请求不支持请求正文中的任何内容)。

第二条规则是重写,它与重定向不同。

您可以在此处了解有关差异的更多信息:https://stackoverflow.com/a/12399668/2453432

解决方案

请改用R=308。这也是一个永久重定向,但它告诉客户端对新请求使用相同的 http 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多