如何在没有重定向的情况下使用GET删除表单的变量

时间:2012-09-26 14:40:47

标签: html forms search url-rewriting get

  

可能重复:
  Form Submit URL Formatting

我的形式很简单:

<form method="GET" action="http://{$smarty.server.SERVER_NAME}/recherche/">
        <input type="text" name="s" value="Recherche" class="text" id="searchbox" />
        <input type="submit" class="search" value="Rechercher !" title="Rechercher !" />
</form>

当我提交表单时,网址会将我带到:

http://mywebsite.com/recherche/?s=mysearch

但我正确地重写了这个网址:

# Recherche
RewriteRule ^recherche/([^/]*)$ /index.php?page=recherche&s=$1 [L]

但我不知道如何使用正确的网址(没有&amp; s =)没有重定向

1 个答案:

答案 0 :(得分:1)

您的重写规则:RewriteRule ^recherche/([^/]*)$ /index.php?page=recherche&s=$1 [L]仅在内部向服务器重写一个方向。此规则对浏览器没有任何影响,除了响应看起来像/recherche/something的请求发送的内容。如果您确实希望更改地址栏中的URL,则需要重定向响应请求,而不是在内部执行某些URI修改并返回内容。要做到这一点,你需要:

RewriteCond %{THE_REQUEST} ^GET\ /recherche/\?s=([^&\ ]+)
RewriteRule ^recherche/$ /recherche/%1? [L,R=301]

然后你有了你的规则:

RewriteRule ^recherche/([^/]*)$ /index.php?page=recherche&s=$1 [L]

他们俩都应该一起工作。一个浏览器重定向到没有查询字符串的URL,另一个使用不带查询字符串的URL,并在内部将其重写回查询字符串。