php - 为什么 POST 不适用于 htaccess 中的某些重写条件?
问题描述
所有 $_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 请求不支持请求正文中的任何内容)。
第二条规则是重写,它与重定向不同。
您可以在此处了解有关差异的更多信息:https ://stackoverflow.com/a/12399668/2453432
解决方案
改为使用R=308
。这也是一个永久重定向,但它告诉客户端对新请求使用相同的 http 方法。
推荐阅读
- c# - Activator 未能创建对象实例,抛出 MissingMethodException
- variables - 常量变量重新定义?
- c - C链表 - 指针的值改变
- javascript - 如何解决:被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头
- node.js - 何时使用 Mongoose 建立索引
- reactjs - 反应钩子如何确定它们的组件?
- mysql - 如何从 MySql 中未规范化的表格单元格中解析/提取数据?
- python - 仅下载某些 MNIST 数字
- angular - Angular 6 - 无法订阅从服务返回的数据
- excel - 如何查找特定时间段内的条目数