2015-07-19 94 views
0

我正在尝试将我网站上的所有以下网址重定向到新版本。这里是我们的目标:.htaccess使用GET变量的通配符重定向

BEFORE(注意,没有 '.PHP ')

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

重定向到(有' .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

你可以尝试负断言:

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

因此,如果网址不/工具开始,第三条规则将不会被跳过,因此你有你的包罗万象的重定向。


作为一个测试,你也只需要添加一个简单的:

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

如果不工作,你就知道什么东西完全是怎么回事。

+0

我刚试过,当我访问https://example.com/view?username=test没有重定向 – StackOverflower

+0

你有其他重写规则优先吗?也许更高的地方 –

+0

我把它移到我的.htaccess文件的顶部,没有什么是重定向。 – StackOverflower