Apache重定向使用带有和不带查询字符串的RewriteEngine

时间:2016-05-13 19:45:42

标签: apache .htaccess url-rewriting url-redirection

我试图在我的htaccess文件上设置2个重定向,但我无法使其工作。

所需的输出是:

  • 如果用户转到www.mywebsite.com/page1,则会将其重定向到/folder/newPage
  • 如果用户转到www.mywebsite.com/page1?a=123,则会将其重定向到/folder/anotherPage?a=123

我试过这个

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/page1$ /folder/newPage [R=301,L]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/page1(.*)$ /folder/anotherPage$1 [R=301,L]

我也试过这样的事情:

RewriteCond %{REQUEST_URI}  ^/page1$
RewriteRule ^(.*)$ /folder/newPage [R=301,L]

RewriteCond %{REQUEST_URI}  ^/page1$
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ /folder/anotherPage%1 [R=301,L]

请注意,在我的apache上启用了Rewrite mod。

知道如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

检查以下内容:

  1. RewriteEngine On出现在所有规则之前
  2. AllowOverride指令允许加载htaccess文件
  3. htaccess接收不带前导斜杠的URL,与服务器配置文件或VHosts文件不同。
  4. .*匹配 0或更多个字符,因此%{QUERY_STRING} ^(.*)$也匹配空查询字符串。将其更改为.+
  5. 最终规则应该是:

    RewriteEngine On
    
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^page1$ /folder/newPage [R=301,L]
    
    RewriteCond %{QUERY_STRING} ^(.+)$
    RewriteRule ^page1$ /folder/anotherPage?%1 [R=301,L]