Htaccess重定向 - 在一个重定向中组合多个规则

时间:2016-12-23 11:32:45

标签: apache .htaccess redirect mod-rewrite expressionengine

我正在尝试在单个重定向中组合更多规则,现在我有许多规则和许多重定向,如附图所示,但对于SEO目的,这不是一个好的行为。

enter image description here

故事是这样的:我有一个旧的网址,它不再存在,而且是一个新网址,我想要重定向。如果请求的网址没有www。和https然后我想添加它们。如果网址末尾有斜杠,我想删除它。 一切正在进行,但是分多步进行。

这就是我在.htaccess文件中的内容:

301使用www。

从旧网址重定向到新网址
RewriteRule ^source1/source2$ https://www.domain.com/destination1/destination2 [L,R=301]

从URL

的末尾删除斜杠
RewriteCond %{REQUEST_URI} !^/system [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/$ /$1 [R=301,L,QSA]

重定向到https

#-----------------redirect to https-----------------
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www.domain.com(.*)$ [NC]
RewriteRule (.*) https://www.domain.com%{REQUEST_URI} [L,R=301]

我在这个指令中使用了所有这些规则:

<IfModule mod_rewrite.c>

1 个答案:

答案 0 :(得分:3)

这样做可以避免多个301用于搜索引擎优化目的:

# specific redirects
RewriteRule ^source1/source2/?$ https://www.domain.com/destination1/destination2 [L,R=301,NC]

# Remove the slash from the end of URL
RewriteCond %{REQUEST_URI} !^/system [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ https://www.domain.com/$1 [R=301,L,NE]

#-----------------redirect to https-----------------
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.domain.com%{REQUEST_URI} [L,R=301,NE]

确保在测试此更改之前完全清除浏览器缓存。