使用RewriteRule发送POST数据

时间:2014-07-30 12:52:28

标签: 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    [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>

它工作并将所有请求发送到index.php,但问题是如果我尝试通过POST发送数据它没有到达index.php,如果我发送它得到它的工作,但让我说我有一个登录页面,我无法通过get发送所有数据,因为我不想在网址中看到密码。

那么有没有办法用.htaccess文件将post数据发送到index.php?

我知道在网站上还有其他问题,但是我尝试了其中一个并且没有工作,他们中的许多人回答说在.htaccess文件的[]中添加P但是如果我这样做我得到我提出错误请求的错误。

1 个答案:

答案 0 :(得分:3)

通常我会对应用程序使用此重写,现在它的效果非常好:

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,则网址将类似于example.com/controller/action/。但是你需要某种路由来确定模式。

作为参考,您可以查看Slim Framework,它有一个很好的定义路径的方法,与模块/控制器/操作的命名模式等无关。