我必须根据两个不同的标准完成不同的重定向:a)域/子域和b)内容类型(带有分片子域的CDN)。
Apache .htaccess
的重定向条件应该完成:
我将下面的重定向怪物砍掉了,根据Opera的Firebug,它似乎正在起作用(或多或少):
<IfModule mod_rewrite.c>
RewriteEngine on
# Redirect example.com to de.example.com.
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://de.example.com/$1 [L,R=301]
…
# Redirect www.example.com to de.example.com.
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://de.example.com/$1 [L,R=301]
# Redirect mail.example.com to de.example.com.
RewriteCond %{HTTP_HOST} ^mail.example.com [NC]
RewriteRule ^(.*)$ http://de.example.com/$1 [L,R=301]
# Redirect cdn.example.com to to de.example.com for all non image requests.
RewriteCond %{HTTP_HOST} cdn.example.com [NC]
RewriteCond %{REQUEST_URI} !\.(png|gif|jpg|jpeg|ico)$ [NC]
RewriteRule ^(.*)$ http://de.example.com/$1 [L,R=301]
# Redirect js.example.com to to de.example.com for all non js requests.
RewriteCond %{HTTP_HOST} js.example.com [NC]
RewriteCond %{REQUEST_URI} !\.(js|…)$ [NC]
RewriteRule ^(.*)$ http://de.example.com/$1 [L,R=301]
# Redirect css.example.com to to de.example.com for all non css requests.
RewriteCond %{HTTP_HOST} css.example.com [NC]
RewriteCond %{REQUEST_URI} !\.(css|…)$ [NC]
RewriteRule ^(.*)$ http://de.example.com/$1 [L,R=301]
…
</IfModule>
这些重定向提供来自CDN子域的静态内容; js.example.com/somepage正确重定向到de.example.com/somepage。但是,访问js.example.com(服务器的根目录)不重定向到de.example.com。此外,浏览器的状态栏似乎表示重定向链,但我不知道如何正确分析潜在的循环重定向。所以似乎有些不对劲,但我还没能解决它。
这种复杂的重写是.htaccess
正确的方法,是否有更智能的方法来完成基于子域和内容类型的不同重定向?