1

我们最近重建了一个客户的网站。他们发现谷歌列出了一些旧链接。我们正在尝试将这些链接重定向到主页。

http://www.joiningtech.com/index.html?GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA http://www.joiningtech.com/index.html?GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ

我已经尝试了几种方法来使用 .htaccess 文件让这两个重定向正常工作。

方法#1

redirect 301 http://www.joiningtech.com/index.html?GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA http://www.joiningtech.com/
redirect 301 http://www.joiningtech.com/index.html?GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ http://www.joiningtech.com/

方法#2

RewriteCond %{QUERY_STRING} ^([^&]&)*GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA(&|$)
RewriteRule ^/index\.php$ http://www.joiningtech.com/? [L,R=301]
RewriteCond %{QUERY_STRING} ^([^&]&)*GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ(&|$)
RewriteRule ^/index\.php$ http://www.joiningtech.com/? [L,R=301]

我在stackoverflow的其他地方找到了这些方法。我想知道我是否做错了什么,并希望得到任何帮助!

谢谢,克里斯

4

2 回答 2

1

使用字典比较,当你不需要它们时,它比正则表达式更清晰。

RewriteEngine On
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA [OR]
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ
RewriteRule ^index.html$ http://www.joiningtech.com/? [L,R=301]

您的第一个方法(使用Redirect)不起作用,因为您将 full 指定为第URL一个参数,但它只需要URL. 以下也将起作用:

redirect 301 /index.html?GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA http://www.joiningtech.com/
redirect 301 /index.html?GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ http://www.joiningtech.com/

第三种使用方法mod_rewrite是:

RewriteEngine On
RewriteCond %{REQUEST_URI} =/index.html [NC]
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA [OR]
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ
RewriteRule .* http://www.joiningtech.com/? [L,R=301]
于 2012-12-07T21:58:04.203 回答
0

好的,感谢卡米尔的帮助和一些反复试验,我找到了答案。这个网站是一个 WordPress 网站。.htaccess 文件按此顺序具有以下内容:

# suExec for PHP
Action application/x-pair-sphp /cgi-bin/php5.cgi
AddType application/x-pair-sphp .php
#Video MIME Types:
AddType video/m4v .m4v
AddType video/ogg .ogv
AddType video/mp4 .mp4
AddType video/webm .webm

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

</IfModule>
redirect 301 /pages/laser.html http://www.joiningtech.com/pages/welding.html
redirect 301 /index_nosound.html http://www.joiningtech.com/
RewriteEngine On
RewriteCond %{REQUEST_URI} =/index.html [NC]
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA [OR]
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ
RewriteRule .* http://www.joiningtech.com/? [L,R=301]

我猜是 WordPress 重写代码和后来的代码有冲突。因此,我将 WordPress 重写代码重新排序到新重定向的下方。

# suExec for PHP
Action application/x-pair-sphp /cgi-bin/php5.cgi
AddType application/x-pair-sphp .php
#Video MIME Types:
AddType video/m4v .m4v
AddType video/ogg .ogv
AddType video/mp4 .mp4
AddType video/webm .webm

</IfModule>
redirect 301 /pages/laser.html http://www.joiningtech.com/pages/welding.html
redirect 301 /index_nosound.html http://www.joiningtech.com/
RewriteEngine On
RewriteCond %{REQUEST_URI} =/index.html [NC]
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CNbT06iehLQCFQWe4AodejAAkA [OR]
RewriteCond %{QUERY_STRING} =GAW+CAM2&gclid=CMncjs-ehLQCFdKd4Aod52AAAQ
RewriteRule .* http://www.joiningtech.com/? [L,R=301]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

这现在有效。我仍然需要知道是否可以有两个“RewriteEngine On”实例。

于 2012-12-10T22:34:23.310 回答