mod_rewrite之后POST不工作



这是我的htaccess

Options -Indexes
<IfModule dir_module>
DirectoryIndex in.php
</IfModule>
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteRule .(css|jpe?g|gif|png|js|css|htm|html|mp3|wav|ico)$ - [L]
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]+ /([^/]+/)*[^.#? ]+.php([#?][^ ]*)? HTTP/
RewriteRule ^(([^/]+/)*[^.]+).php http://www.example.com/$1 [R=301,L]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^some/(.*)/(.*)/$ test.php?z=$1&n=$2 [NC,L]
RewriteRule ^some/(.*)/(.*)$ test.php?z=$1&n=$2 [NC,L]
RewriteRule ^some/(.*)/$ test.php?z=$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !.*test.php$ [NC]
RewriteRule ^([^.]+)$ $1.php [NC,L]

在实现mod_rewrite之后,具有相对路径的$_POST都不起作用。

注意:我已经设置<基本href="http://example.com/"/>和RewriteBase/如上所述

我已经在SO上完成了其他问题,但没有运气!

谢谢你的建议!

对不起。。从这个意义上说,POST变量可能在htaccess重定向过程中丢失???

我会验证用于构建表单操作的代码。我同意上面的评论,因为重定向,您正在丢失POST变量。

为什么会发生这种情况?

首先,从非www重定向到www的重写规则应该只发生在第一次有人访问你的网站而没有www的时候。您应该相应地进行编程。

也就是说,有人在"example.com"中键入,你的重写会将他们带到"www.example.com"

从那时起,如果您必须在表单中引用完整的域,请使用整个WWW版本。

<form action="http://www.example.com/processForm.php" method="POST">

或者,您可以停止使用完整域。

我经常看到这种情况发生在程序员使用定义配置对象的插件时。也许那个配置对象指向非www版本是偶然的。想象一下这个代码:

$config = array('domain'=>'example.com', 'othersettings'=>'more here');

表单有时是这样创建的:

<form action="<?php echo $config['domain'] ?>/processForm.php" method="POST">

看,这将被转换为非www版本,从而丢失POST值。

祝你好运!

最新更新