htaccess 301重定向添加“?”和不需要的段

时间:2011-10-23 13:02:58

标签: apache .htaccess mod-rewrite redirect

我正在使用这样的东西:

Redirect 301 /old http://example.com/new

重定向到http://example.com/new?old

我不希望第一个变量添加到第二个变量,所以我该如何避免这个?

可能是因为文档中其他地方的RewriteCond / RewriteRule吗?完整的文档看起来像这样:

# Enable Rewrite Engine
RewriteEngine On
RewriteBase /

# Remove index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteRule ^(.*)$ /index.php?$1 [L]

# Remove www.
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# Section redirects
Redirect 301 /old http://example.com/new

任何帮助表示赞赏。感谢。

2 个答案:

答案 0 :(得分:1)

来自mod_rewrite-docs

  

修改查询字符串   默认情况下,查询字符串将保持不变。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串。如果要删除现有查询字符串,请仅使用问号结束替换字符串。要组合新旧查询字符串,请使用[QSA]标志。

这意味着您可以添加'?'在重定向目标的末尾删除“旧”query_string。

试试这个:

# Section redirects
Redirect 301 /old http://example.com/new?

答案 1 :(得分:1)

正如@Seybsen指出的那样,可以使用问号删除查询字符串。

我发现只要在文档中正确定位,我也可以使用RewriteRule。它必须位于删除index.php的部分之上。

RewriteRule ^old http://example.com/new [R=301,NC,L]

或者,使用query_string:

RewriteRule ^old(.*) http://example.com/new$1 [R=301,NC,L]