2015-03-02 7 views
1

После много исследований и некоторой помощи мне удалось немного узнать, как работает mod rewrite ... Может ли кто-нибудь сказать мне, что случилось с моим кодом ниже?простой mod_rewrite redirects

######redirect all static files to the static domain 
RewriteCond %{REQUEST_URI} ^/(.+)\.(gif|png|jpg|jpeg|jfif|bmp|css|js)$ [NC] 
RewriteRule ^(.*)$ http://static.example.com/$1 [R=301,L] 

######redirect naked to www 
RewriteCond %{HTTP_HOST} ^example.com$ [NC] 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

######redirect IP to www 
RewriteCond %{HTTP_HOST} ^100\.100\.100\.100$ 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

######redirect all non static files from static domain (because that remains) to www 
RewriteCond %{REQUEST_FILENAME} !\.(gif|png|jpg|jpeg|jfif|bmp|css|js)$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

Спасибо!

Кроме того, в чем разница между:

RewriteCond %{REQUEST_URI} !^/(.+)\.(gif|png|jpg|jpeg|jfif|bmp|css|js)$ [NC] 

и

RewriteCond %{REQUEST_FILENAME} !\.(gif|png|jpg|jpeg|jfif|bmp|css|js)$ [NC] 
+1

С какими проблемами вы сталкиваетесь? – anubhava

+0

@anubhava: 'www.example.com/image.png' не перенаправляется на' static.example.com/image.png' – MainHero

+0

@MainHero первое правило должно сделать это за вас. Вы говорите, что сейчас это не работает? –

ответ

1

Попробуйте .htaccess:

######redirect all static files to the static domain 
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC] 
RewriteRule \.(gif|png|jpe?g|jfif|bmp|css|js)$ http://static.example.com%{REQUEST_URI} [R=301,L,NC] 

######redirect naked to www 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC,OR] 
RewriteCond %{HTTP_HOST} ^100\.100\.100\.100$ 
RewriteRule^http://www.example.com%{REQUEST_URI} [R=301,L] 

######redirect all non static files from static domain (because that remains) to www 
RewriteCond %{HTTP_HOST} ^static\. [NC] 
RewriteRule !\.(gif|png|jpe?g|jfif|bmp|css|js)$ http://www.example.com%{REQUEST_URI} [R=301,L,NC] 
+0

Не могли бы вы объяснить, что делает '^ (www \.)?'? – MainHero

+0

То, что соответствует 'www', необязательно, соответствует как' www.example.com', так и 'example.com' – anubhava

+0

Отлично, спасибо !!! – MainHero

1

Основе наш предыдущий разговор. Вы также можете комбинировать правила www и IP. Нужно только проверить, нет ли www.

######redirect naked to www or IP 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

######redirect all static files to the static domain 
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC] 
RewriteCond %{REQUEST_URI} ^/(.+)\.(gif|png|jpg|jpeg|jfif|bmp|css|js)$ [NC] 
RewriteRule ^(.*)$ http://static.example.com/$1 [R=301,L] 

######redirect all non static files from static domain (because that remains) to www 
RewriteCond %{HTTP_HOST} ^images\.example\.com [NC] 
RewriteCond %{REQUEST_URI} !^/(.+)\.(gif|png|jpg|jpeg|jfif|bmp|css|js)$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301 

Это по-другому.