我创建了一个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)
答案 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]