使用htaccess重定向提交表单后$ _POST为空

时间:2015-03-10 15:27:18

标签: php .htaccess redirect post

我在提交html表单后遇到空$ _POST数组的问题。

<form action="interview/booking_summary" method="POST">
    <p>Ihr Name: <input type="text" name="name" /></p>
    <p>Ihr Alter: <input type="text" name="alter" value="23" /></p>
    <p><input type="submit" name="submit" /></p>
</form>

我认为这与我的.htaccess文件有关。这似乎是重定向页面(例如file.php将显示为文件(没有.php后缀)

不幸的是,我只是在一个我没有自己编程的网站上工作,所以我不太了解htaccess文件的作用。

它有一些重写规则,我认为这些是负责任的......

ErrorDocument 403 /fehler/403/
ErrorDocument 404 /fehler/404/

# PHP Settings
# php_flag magic_quotes_gpc off
# php_flag register_globals off

RewriteEngine On
#Options +FollowSymlinks
RewriteBase /

# Verhindert Probleme mit Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]

# Ordner
RewriteRule cronjobs\/ - [L]
RewriteRule ^([a-z]{2,2})/rss/$ /cronjobs/rss.php?language=$1 [L]

# Admincenter
RewriteRule ^admin/$ /admin/index.php [L]

# Wartung
RewriteRule ^construction/ /wartung.php [L]

# Sprache
RewriteRule ^de/$ /index.php?lang=de
RewriteRule ^en/$ /index.php?lang=en

# Allgemein

RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/$ /index.php?content=$2/index&lang=$1 [L]
RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/page-([0-9]+)/$ /index.php?content=$2/index&page=$3&lang=$1 [L]
RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?content=$2/single&id=$3&lang=$1 [L]
RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/add-([a-zA-Z0-9_-]+)/$ /index.php?content=$2/single&id=$3&add=$4&lang=$1 [L]
RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/page-([0-9]+)/$ /index.php?content=$2/single&id=$3&page=$4&lang=$1 [L]
RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/edit-([a-zA-Z0-9_-]+)/$ /index.php?content=$2/single&id=$3&edit=$4&lang=$1 [L]
RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/delete-([a-zA-Z0-9_-]+)/$ /index.php?content=$2/single&id=$3&delete=$4&lang=$1 [L]
RewriteRule ^([a-z]{0,2}/)([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?content=$2/single&id=$3&permalink=$4&lang=$1 [L]

# Error Dokumente
RewriteRule ^fehler/([0-9]+)/$ /index.php?content=error&code=$1 [L]

RewriteRule ^booking-summary booking-summary.php    [L]


#@__HCP_END__@#
# Anything after the comment above is left alone

我试图找到一个解决方案并遇到了这个帖子: PHP method="post" stopped working after I added this .htaccess... Why?

因此我尝试添加重写规则:

RewriteRule ^booking-summary      booking-summary.php    [L]

但不幸的是,这并没有成功。 你能告诉我如何为这个php文件制作一个exeption,以便我可以访问我的$ _POST数组吗?

提前致谢。

干杯

中号

3 个答案:

答案 0 :(得分:1)

您必须将重定向的http代码设置为307以允许重定向POST数据:

[R=307,L]

307告诉浏览器使用相同的方法使用新网址重试请求。 302和303告诉浏览器改为使用GET。

答案 1 :(得分:1)

看看这是否有帮助。您实际上没有与您的帖子URL匹配的规则。 如果这是你的link interview/booking_summary,那么它需要在规则中,因为我没有看到那里已经处理过这个问题。

在表单网址中添加/,这样您就不必乱用现有规则。

<form action="interview/booking_summary/" method="POST">

然后尝试这个重写提供预订摘要在面试文件夹中。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^interview/booking-summary/?$ /interview/booking-summary.php [L]

答案 2 :(得分:-1)

可能是这条规则:

# Verhindert Probleme mit Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]

是罪魁祸首。这是重定向URL,因此它们有一个尾部斜杠,并且由于您的表单操作没有尾部斜杠,它被重定向并在此过程中丢失POST值。尝试将表单操作更改为:

<form action="interview/booking_summary/" method="POST">