首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使RewriteCond更改THE_REQUEST而不是REQUEST_METHOD

如何使RewriteCond更改THE_REQUEST而不是REQUEST_METHOD
EN

Stack Overflow用户
提问于 2013-09-19 19:28:35
回答 2查看 7.3K关注 0票数 2

我从网上得到了一条重写规则:

代码语言:javascript
运行
复制
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

这个规则工作得很好,但是现在当我试图发送一条POST消息时,这个规则也会重写要获取的方法。这是我的表格:

代码语言:javascript
运行
复制
<form action="check.php" method="post">
<input type="text" name="email" id="email"/>
<input type='submit' value='check'>
</form>

这就是我从服务器上得到的(var_dump($_SERVER))

代码语言:javascript
运行
复制
["REQUEST_METHOD"]=>
string(3) "GET"

我不太熟悉重写规则。您能告诉我如何修复它,以便它仍然处理php文件扩展名,但不会触及REQUEST_METHOD部件(从POST到GET)?

谢谢。

更新完整规则:

代码语言:javascript
运行
复制
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /


# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [L,NC] #[R,L,NC]


## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-19 20:22:26

您的.htaccess应该是这样的:

代码语言:javascript
运行
复制
Options +FollowSymLinks -MultiViews 

RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

您不应该在.htaccess的条件和规则的相同行上使用注释,如下所示:

代码语言:javascript
运行
复制
RewriteRule ^ %1 [L,NC] #[R,L,NC]

由于它将使.htaccess无法工作,所以注释应该总是在一个新的行上。

您的表单应该是这样的:

代码语言:javascript
运行
复制
<form action="http://domain.com/check" method="post">
<input type="text" name="email" id="email"/>
<input type="submit" value="check">
</form>

这应该正确地返回您想要的值作为POST方法。

代码语言:javascript
运行
复制
array(1) { ["email"]=> string(4) "text you typed on the input box" } 
票数 2
EN

Stack Overflow用户

发布于 2013-09-19 19:51:02

您正在进行重定向的R --所以您将投递到一个仅仅转储POSTed数据并重定向请求(HTTP )的位置。post应该指向/dir/foo,它可以传递给/dir/foo.php,但是当前的.htaccess不允许这样做。

您的表单应该如下所示:

代码语言:javascript
运行
复制
<form action="/check" method="post">
      <input type="text" name="email" id="email"/>
      <input type='submit' value='check'>
</form>

下面是.php文件的内部路由示例。

代码语言:javascript
运行
复制
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f  # As long as it's not a file
 RewriteCond %{REQUEST_FILENAME} !-d  # As long as it's not a directory
 RewriteRule (.*) $1.php [L,QSA]

希望这能给你指明正确的方向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18903303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档