为什么我的表单在.htaccess URL重写后无法正常工作?

时间:2014-02-04 18:35:07

标签: forms apache .htaccess mod-rewrite url-rewriting

我从其他一些帖子中复制了以下代码。它成功地帮助我从URL中删除了.php扩展名。但是,在执行此操作后,我的表单不再有效。我的表单类似<form method='post' action='login.php' ...。现在,当我提交表单时,它不会将数据发送到该位置。我意识到如果我将action='login.php'更改为action='login',表单将再次有效。但是有很多页面包含发布到我网站中不同位置的表单,我不想手动更改这么多页面。所以我想知道为什么数据没有按预期发布,我该如何解决问题。谢谢!

RewriteEngine On

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://localhost/domainname/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{REQUEST_FILENAME} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://localhost/domainname/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://localhost/domainname/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]

2 个答案:

答案 0 :(得分:3)

在其他规则之前的上添加此规则,以跳过重写的所有POST请求:

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

答案 1 :(得分:0)

我想将user_login.php重定向到seo友好的网址,例如/ user-login和帖子表单数据,这对我有用。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/user_login\.php [NC]
RewriteRule ^ user-login [QSA,R=301]
RewriteRule ^user-login$ user_login.php [QSA,L]

在视图文件

<form action="<?php $siteurl;?>/user-login" method="post" id="user_login">