在我的应用程序中,我想发送index.php中的所有请求,我在其中选择要使用的 Controller 和方法并调用该方法并给出通过get或post接收的参数。 因此,在根目录中,我放置了一个包含以下代码的 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [QSA,L,NC,PT]
RewriteRule (.*) public/$1 [QSA,L,NC,PT]
我将所有请求发送到我有这个 .htaccess 文件的公共(public)文件夹:
<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发送它,它可以工作,但可以说我有一个登录页面,我无法通过 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,并且那里的代码必须解析它并做出相应的响应。
使用自定义框架的事件(正如您所提到的,您想使用自己的[我不建议您这样做])。
您可以使用静态路由并在应用程序级别解析它们,因此假设您的站点位于 exmaple.com
上,URL 将类似于 example.com/controller/action/
。但您需要某种路由来确定模式。
作为引用,您可以查看 Slim Framework ,它有一个非常好的定义路由的方法,与模块/ Controller /操作等的命名模式无关。
关于php - 使用 RewriteRule 发送 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037355/