2016-05-13 67 views
1

我想在我的htaccess文件上设置2个重定向,但我不能让它工作。Apache重定向使用RewriteEngine有和没有查询字符串

所需的输出是:

  • 如果用户去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。

任何想法如何使它工作?

回答

1

检查通过如下:

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

最终规则应该是:

RewriteEngine On 

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

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

'RewriteEngine叙述On'设置在文件的开头。重写mod打开并正常工作。关于3.不知道如何验证这一点? – alexmngn

+0

@alexmngn变化'^重写规则/第1页$''要重写规则^ 1页$' – hjpotter92

+0

我第一次一个工作,但不是第二个...好像第一条规则接管第二规则 – alexmngn

相关问题