使用.htaccess RewriteRule时,似乎POST值会丢失.GET值没问题.怎么修?

Har*_*iec 12 php parameters .htaccess mod-rewrite post

几天前,我有一个关于从地址栏中删除index.php的问题,因此页面的地址看起来越来越短.这个问题的最短解决方案是.htaccess文件中的(RewriteRule ^ index.php/[L,R = 301]).它的工作原理!

由于我将该字符串放入.htaccess中,因此某些页面会重定向到主页面.我花了很多时间猜测,为什么.据我了解,答案是:with RewriteRule ^index.php / [L,R=301],$ _POST参数不会发送到下一页.$ _GET参数没问题.一旦我RewriteRule ^index.php / [L,R=301]从.htaccess中删除,一切都会像往常一样变得很好.为什么会发生以及如何解决这个问题?

谢谢.

mar*_*rio 19

[R]标志将导致重定向.用户代理会根据GET请求发出重定向.如果您真的想将URL缩短到/根路径,则无法做任何事情.

但是,您可以阻止POST请求被重写/重定向:

RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^index.php / [L,R=301]
Run Code Online (Sandbox Code Playgroud)


Ger*_*ben 12

您可以尝试使用[L,R=307].307不得根据规范更改请求方法,但我不知道浏览器如何实现307.

但问题的根源在于使用 <form action="____/index.php" ...

只需将操作留空即可POST到当前网址,例如


Joh*_*hny 5

我正在使用类似的东西:

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/(css|images|js)/

# don't rewrite existing files, directories and links

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l


# rewrite everything else to index.php

RewriteRule .* index.php [L]

</IfModule>
Run Code Online (Sandbox Code Playgroud)

它适用于所有请求,通过index.php文件重写它.如果您需要重定向301(代表Moved Permanently代码),请查看以下问题:是否可以重定向发布数据?