在mod_rewrite之后POST无法正常工作

时间:2013-02-10 17:19:48

标签: php html .htaccess

这是我的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正在工作。

注意:我已经设置好了      &LT; base href =“http://example.com/”/&gt; 和RewriteBase /如上所述

我在SO处遇到了其他问题,但没有运气!

感谢您的建议!

我很抱歉..在这个意义上不起作用,POST变量可能会在htaccess重定向期间丢失???

1 个答案:

答案 0 :(得分:1)

我会验证您用于构建表单操作的代码。我同意上面的评论,因为重定向导致你丢失了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值。

祝你好运!

相关问题