从我的 htaccess 中删除双重 301 重定向?

Remove double 301 redirect from my htaccess?

我刚刚意识到我的 htaccess 在某些情况下会产生双重 301 重定向。例如,如果您尝试访问 http://example.com/old_url,它将:

我的 htaccess 是这样设置的:

RewriteEngine On 

# Add www
RewriteCond %{HTTP_HOST} ^example.com [nocase]
RewriteRule ^(.*) http://www.example.com/ [last,redirect=301]

# Do some url rewriting
RewriteRule ^new_url_1$ new_url_1.php [NC,L]
RewriteRule ^new_url_2$ new_url_2.php [NC,L]

# Do the 301 redirections
Redirect 301 /old_url_1 http://www.example.com/new_url_1
Redirect 301 /old_url_2 http://www.example.com/new_url_2

如何解决这个问题,使它只有一个 301 以获得更好的 SEO?

不要将 Redirect 指令与 mod_rewrite 规则混合使用,并在 www 规则之前保留特定的重定向规则:

RewriteEngine On 

## Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ / [NE,R=302,L]

# Do specific 301 redirections
RewriteRule ^old_url_1$ http://www.example.com/new_url_1 [L,NC,R=301]
RewriteRule ^old_url_2$ http://www.example.com/new_url_2 [L,NC,R=301]

# Add www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301]

# Do some url rewriting
RewriteRule ^new_url_1$ new_url_1.php [NC,L]

RewriteRule ^new_url_2$ new_url_2.php [NC,L]

确保在测试前清除浏览器缓存。