2012-02-02 145 views
2

我很難弄清楚什麼是錯誤。在使用CDN重定向到.htaccess中時重定向圖像上的循環

只要我將我的CDN代碼添加到我的.htaccess中以將靜態內容重定向到CDN,就會導致這些文件發生重定向循環。

我注意到他們保持重定向到自己而不是加載文件。

我的.htaccess:

RewriteEngine On 

# Force no www 
RewriteCond %{HTTP_HOST} ^www [NC] 
RewriteRule ^.*$ http://domain.com/$0 [R=301,L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ 
RewriteRule ^index\.php$ http://domain.com/ [R=301,L] 

# Rewrite domain.com/p/contact to index.php?p=contact 
RewriteRule ^p/([^/]+)/?$ /index.php?p=$1 [L] 

我的CDN的代碼,會導致網站:

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault A0 

    # Set up caching for 1 week(s) 
    <FilesMatch "\.(jpe?g|gif|png|bmp|pdf|docx?|xlsx?|ppt|rar|zip|tar|gz|tgz|bz2|flv|avi|mov|wmv|mp3|wav)$"> 
     ExpiresDefault A604800 
     Header append Cache-Control "public" 
    </FilesMatch> 

    # Set up caching for 1 day(s) 
    <FilesMatch "\.(xml|txt)$"> 
     ExpiresDefault A86400 
     Header append Cache-Control "public" 
    </FilesMatch> 

    # Set up caching for 1 hour(s) 
    <FilesMatch "\.(js|css)$"> 
     ExpiresDefault A3600 
     Header append Cache-Control "proxy-revalidate" 
    </FilesMatch> 

    # Force no caching for dynamic files 
    <FilesMatch ".(php|cgi|pl|htm)$"> 
     ExpiresActive Off 
     Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform" 
     Header set Pragma "no-cache" 
    </FilesMatch> 
</IfModule> 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP:Via} !\.s\.worldcdn\.com 
    # Flash wont work on cross-domain by default 
    RewriteCond $1   !^.swf$ [NC] 
    RewriteCond $1   "\.(jpe?g|gif|png|bmp|ico|js|css|pdf|docx?|xlsx?|ppt|rar|zip|tar|gz|tgz|bz2|flv|avi|mov|wmv|mp3|wav|xml|txt)$" [NC] 
    RewriteRule ^(.*)   http://cdn.domain.com/$1 [L,R] 
</IfModule> 

子域,CDN等都是正確設置。

也許這是CDN的問題? 歡呼你的幫助!

回答

3

從標誌LApache Docs: flag_l

如果您在任一.htaccess文件或<Directory>部分使用重寫規則,它具有的規則是如何處理一些瞭解是很重要的。這種簡化的形式是,一旦處理了規則,重寫的請求就會交還給URL分析引擎,以便處理它。有可能在處理重寫的請求時,可能會再次遇到.htaccess文件或段,因此規則集可能會從頭再次運行。最常見的情況是,如果其中一個規則導致重定向(無論是內部還是外部),則會導致請求過程重新開始。


因爲,重寫的請求被傳遞迴URL解析引擎,之後從去年RewriteRule這裏重定向,

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP:Via} !\.s\.worldcdn\.com 
    # Flash wont work on cross-domain by default 
    RewriteCond $1   !^.swf$ [NC] 
    RewriteCond $1   "\.(jpe?g|gif|png|bmp|ico|js|css|pdf|docx?|xlsx?|ppt|rar|zip|tar|gz|tgz|bz2|flv|avi|mov|wmv|mp3|wav|xml|txt)$" [NC] 
    RewriteRule ^(.*)   http://cdn.domain.com/$1 [L,R] 
</IfModule> 

要麼
編輯這一行:

RewriteRule ^(.*)   http://cdn.domain.com/$1 [L] 

,如果你想擁有在瀏覽器中的URI變化均勻,加入第一RewriteCond

RewriteCond %{HTTP_HOST} !cdn\.domain\.com 
    RewriteCond %{HTTP:Via} !\.s\.worldcdn\.com 
    RewriteCond $1   !^.swf$ [NC] 
    RewriteCond $1   "\.(jpe?g|gif|png|bmp|ico|js|css|pdf|docx?|xlsx?|ppt|rar|zip|tar|gz|tgz|bz2|flv|avi|mov|wmv|mp3|wav|xml|txt)$" [NC] 
    RewriteRule ^(.*)   http://cdn.domain.com/$1 [L,R] 
+0

非常感謝! :) – rafleo 2012-02-02 16:01:45