mod_rewrite阻止我的表单按需提交

时间:2014-10-23 15:11:27

标签: forms .htaccess mod-rewrite post subdomain

我创建了一个www.example.com和m.example.com。 m.example.com驻留在htdocs / m /文件夹中。我也使用.htaccess删除'.php'扩展名。我在根目录中有以下代码:

RewriteCond %{REQUEST_METHOD} =POST
RewriteRule ^ - [L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]

#mobile
RewriteCond %{HTTP_HOST} ^m\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/m(/|$) [NC]
RewriteRule ^(.*)$ m/$1 [L]

# Resolve .php file for extension-less php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

我在m.example.com中有表单。例如,在m.example.com/myform.php中,我有

<form method="post" action="processform.php">
 .....
</form>

我希望将它提交到m /文件夹(/m/processform.php),但现在它总是提交到主目录的processform.php。我试过action="//m.example.com/processform.php"但没有运气。

任何人都知道如何解决它?谢谢!

更新 如果表单的方法是get而不是post,表单将被正确提交(到/m/processform.php)

2 个答案:

答案 0 :(得分:1)

实际上,您的规则正在从所有重写规则中跳过POST个请求。您可以调整规则以从外部重定向跳过POST,并使POST的内部重写保持活动/启用,如下所示:

# Redirect external .php requests to extensionless url
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]

#mobile
RewriteCond %{HTTP_HOST} ^m\.example\.com$ [NC]
RewriteRule ^((?!m/).*)$ m/$1 [L,NC]

# Resolve .php file for extension-less php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

PS:我还简化了你的第二条规则。

答案 1 :(得分:0)

第一次重定向可能会干扰POST请求,请尝试将请求正则表达式更改为:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\s/+(.*?/)?(?:index)?(.*?)\.php[\s?] [NC]