Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用重写规则发送POST数据_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 使用重写规则发送POST数据

Php 使用重写规则发送POST数据,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,在我的应用程序中,我希望在index.php中发送所有请求,在这里我选择要使用的控制器和方法,调用该方法,并给出通过get或post接收到的参数。 因此,在root director中,我放置了一个.htaccess文件,其中包含以下代码: <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [QSA,L,NC,PT] RewriteRule (.*) public/$1 [Q

在我的应用程序中,我希望在index.php中发送所有请求,在这里我选择要使用的控制器和方法,调用该方法,并给出通过get或post接收到的参数。 因此,在root director中,我放置了一个.htaccess文件,其中包含以下代码:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule    ^$    public/    [QSA,L,NC,PT]
RewriteRule    (.*) public/$1    [QSA,L,NC,PT]

重新启动发动机
重写规则^$public/[QSA、L、NC、PT]
重写规则(.*)公共/$1[QSA、L、NC、PT]

我将所有请求发送到公用文件夹,其中有.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ index.php?url=$1 [QSA,PT,L,NC]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
#将所有其他URL重写为index.php/URL
重写规则^(.*)$index.php?url=$1[QSA、PT、L、NC]
ErrorDocument 404 index.php
它可以工作,并将所有请求发送到index.php,但问题是,如果我试图通过POST发送数据,它没有到达index.php,如果我通过get发送数据,它可以工作,但假设我有一个登录页面,我无法通过get发送所有数据,因为我不希望在url中看到密码

那么,有没有一种方法可以使用.htaccess文件将POST数据发送到index.php


我知道网站上还有其他类似的问题,但我尝试了其中的任何一个,但都没有成功,其中许多人回答说在.htaccess文件的[]中添加了p,但如果我这样做,我会得到一个错误,我提出了一个错误的请求。

通常我对应用程序使用这种重写,目前它运行良好:

RewriteEngine On
# Send the URI to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L] 
基本上,上面的代码将所有不是文件或目录的内容直接传递到index.php,而位于那里的代码必须对其进行解析并做出相应的响应

带有自定义框架的事件(如您所述,您希望使用自己的[,我不建议您这样做)

您可以使用restful路由并在应用程序级别解析它们,因此假设您的站点位于
exmaple.com
上,URL将类似于
example.com/controller/action/
。但是你需要某种路由来确定模式


作为参考,它有一个很好的定义路由的方法,与模块/控制器/操作等的命名模式无关。

它没有进入index.php是什么意思?codeigniter和其他许多框架都能做到这一点,而且它们工作得很好。我没有使用任何框架,我尝试实现我自己的框架,我的意思是,如果我有一个带有方法POST when.htaccess的表单,将url重写为index.php,数据就会丢失。我有一个带有:method=“POST”class=“minimal”的表单action='user/login'带有两个字段用户名和密码,user意味着我需要userController,login是controller方法,这个方法有两个参数username和password。当.htaccess在index.php中将url重写为index.php,以拥有以前的url用户/登录名以及表单文件中的用户名和密码值时,我该怎么做?你能发布
var\u dump($\u post)导致您的登录控制器方法?我相信您的情况。htaccess正在重定向,这就是post数据丢失的原因(尾部斜杠也有同样的问题)。如果重定向,浏览器将在到达应用程序之前发送到目标URL。否则,请将表单操作设置为目标URI,您希望它们能够到达目标URI。谢谢,我是gona,正在查找Slim框架。我不是gona,总是使用我自己的框架,我只是为了练习,不知道在使用真正的框架之前如何在后面工作,我想使用Zend 2,所以我尝试实现类似MVC的东西,我从中学到了,我有一个rout和helpers,但是如果不发送$\u POST数据,它就不会使用我,在你提到的框架中,当你使用rewriterule并将数据发送到index.php时,它也会发送$\u POST值?我也这样做是为了教育目的,并失去了框架纯粹是魔术的感觉。。至于Slim,它更像是一个元框架,所以一切都相对简单。确保所有内容都传递到索引,无需重定向,并使用应用程序(regex、simple explode或您认为合适的方式)对其进行解析。希望我能帮上忙:)我用过explode,有趣的是,最初的url用户/登录名可能是通过1美元的.htaccess文件传递到索引的,但不是,我会尝试更多,也会看看Slim,看看他是怎么做的。谢谢!您可以仔细检查表单操作属性并调查响应和日志,它们可以为您提供关于发生了什么的线索on@DaGhostmanDimitrov你说得对,邮件在重定向时丢失了。这是http代码303的完美用例。为了好奇的人。