.htaccess使用GET变量的通配符重定向

时间:2015-07-19 03:32:59

标签: .htaccess redirect get wildcard http-status-code-301

我正在尝试将我网站上的所有以下网址重定向到新版本。这是目标:

之前(请注意,没有'.php')

https://example.com/view?username=asdf1234

REDIRECTS TO(使用'.php'并在'工具'文件夹中)

https://example.com/tool/view.php?username=asdf1234

我尝试了几个例子,但无法弄明白。这是我最好的猜测

RewriteEngine On
RewriteRule ^/view\?username=(.+) /tool/view.php?%1 [L,R=301]

添加

RewriteEngine On
RedirectMatch ^/view(.*)$ https://example.com/tool/view.php$1

成功重定向,但它是302重定向。当我添加[L,R = 301]时,它给出了500错误。

1 个答案:

答案 0 :(得分:1)

你可以尝试一个否定的断言:

RewriteEngine On
RewriteCond "%{REQUEST_URI}" ^/tool/?.*$
RewriteRule ".?" "-" [S=1]
RewriteRule "^/(.*)$" "/tool/$1?%{QUERY_STRING}" [L,R=301]
  • 第一条规则规定了URL以/ tool开头的条件。
  • 第二条规则规定,如果第一条规则通过,则跳过下一条规则 规则。
  • 第三条规则要求实施重定向到/tool/(TheUrlYouVisited.whatever)

因此,如果URL不以/ tool开头,则不会跳过第三条规则,因此您可以捕获所有重定向。

作为测试,您还可以添加一个简单的:

RedirectMatch ^/view(.*)$ http://www.example.com/tool/view$1

如果这不起作用,你就会知道其他事情正在发生。