2012-02-02 21 views
15

Mam pewne problemy z mod_geoip dla witryny e-commerce, który ma 3 różne sklepy. Mamy główny sklep w katalogu root/store, ale mamy też sklepy w katalogu root/ukstore i root/austore. Główny katalog główny/sklep zawiera katalogi/skin,/media i/js, które zawierają wszystkie css, obrazy i javascripts. Przy obecnej konfiguracji adresy URL bezbłędnie wymieniają bazę, ale pozostawiają cały adres URL nienaruszony, więc jeśli użytkownik z Wielkiej Brytanii przejdzie do katalogu root/store/category/product /, zostanie przekierowany do katalogu root/ukstore/category/product/.htaccess przepisy przepisywania z mod_GeoIP

2 rzeczy, które są teraz problemami.

Kiedy klient uzyskuje dostęp do bezpiecznej strony, takiej jak kasy lub konto, adresy URL css i javascript są przepisywane na root/ukstore/skin lub root/ukstore/js. Czy jest coś, czego mi brakuje w odniesieniu do SSL dla tych adresów?

Po drugie, jeśli użytkownik z RPA uzyskuje dostęp do sklepu, zostaje przepisany do sklepu w Wielkiej Brytanii, a wszystkie pliki CSS, JS, są idealnie połączone ze sklepem/skórą, ale jeśli użytkownik z Wielkiej Brytanii uzyskuje dostęp do przechowaj następnie adresy URL dla css, js i obrazów próbują być przepisane na root/ukstore/skin

Oto kod w moim pliku htaccess w katalogu root/store. Każdy sklep ma również swój własny plik htaccess, ale nie ma tam zbyt wiele.

<IfModule mod_geoip.c> 
GeoIPEnable On 

Options +FollowSymLinks 
RewriteEngine on 
#skip processing directories 
RewriteRule ^store/skin/ - [L,NC] 
RewriteRule ^store/media/ - [L,NC] 
RewriteRule ^store/js/ - [L,NC] 

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(AQ|AU|MY|BV|BN|BN|MM|KH|CN|CX|CC|CK|GQ|FJ|PF|GU|GW|HM|HK|ID|KI|KR|KP|KR|LA|MO|MY|MH|FM|MM|NR|NC|PG|NZ|NU|NF|PG|CN|PH|PN|WS|SG|SB|KR|LK|BN|TW|TW|AU|TH|TL|TK|TO|TV|VU|VN|VN|WF)$ 
RewriteCond %{REQUEST_URI} ^/store(/.*)$ [NC] 
RewriteRule^/austore%1 [L,R] 

#UK Store Rewrites 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(AF|AX|AL|DZ|AD|AO|AM|AT|AZ|BH|BD|IS|BY|BE|BJ|BT|BA|BW|IO|BG|BF|BI|GB|CM|ES|CV|CF|TD|GB|KM|CG|CD|CG|CD|CI|HR|CY|CZ|CZ|BJ|DK|DJ|EG|ER|EE|ET|FO|FI|FR|TF|GA|GM|GE|DE|GH|GI|GD|GR|GL|GN|VA|HU|IS|IN|IR|IR|IQ|IE|IL|IT|CI|JO|KZ|KE|KW|KG|LV|LB|LS|LR|LY|LY|LI|LT|LU|MK|MG|MW|MV|ML|MT|MR|MU|MC|MC|MN|ME|MA|MZ|NA|NP|NL|NE|NG|IE|NO|OM|PK|PS|PS|CG|PL|PT|QA|CI|MK|ZA|CD|RE|RO|RU|RW|SH|SM|ST|SA|SN|RS|SC|SL|SK|SI|SO|SO|ZA|ES|SD|SJ|SZ|SE|CH|SY|SY|TJ|TZ|TN|TR|TM|AE|UG|UA|AE|GB|BF|UZ|VA|GB|EH|YE|ZM|ZW)$ 
RewriteCond %{REQUEST_URI} ^/store(/.*)$ [NC] 
RewriteRule^/ukstore%1 [L,R] 
</IfModule> 

Każda pomoc zostanie bardzo doceniona!

+0

Czy adresy URL css/obrazu zaczynają się od wiodącego ukośnika, np. '/ Store/skin/my.css', czy też są to' skin/my.css'? –

+0

To konfiguracja magento, więc są one w rzeczywistości /store/skin/frontend/default/theme/css/my.css. Ale w CSS są to url (../ images/bg-main3.jpg) – coloradohiker

+0

Biorąc pod uwagę, że CSS ma wiodący ukośnik, pierwsza reguła uniemożliwi jego przepisanie. Kiedy powiedziałeś, że "próbuje się przepisać na root/ukstore/skin", widzisz przekierowania do '/ ukstore/skin' lub czy tak jest w .html dla Ukstore? –

Odpowiedz

1

Problem polega na tym, że korzystasz z warunków przepisywania w kontekście .htaccess, więc warunki powinny być względne w stosunku do katalogu, w którym się znajdujesz i to jest powód, dla którego warunki przepisywania odnoszą się do skóry, js i nośników wymienionych w pytanie nie pasuje. Należy wymienić je na coś takiego:

RewriteRule ^(skin|media|js)/ - [L,NC] 

lub, jak wspomniano w przewodniku mod_rewrite (http://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteRule)

Jeśli chcesz dopasować przeciwko pełnej ścieżka_url w per-katalogu (htaccess) RewriteRule, użyj zmiennej% {REQUEST_URI} w RewriteCond.

0

przekierowanie oparte na IP może zawodzić, a co zwykle ludzie chcą to język oparte przekierowania. Możesz czytać język skonfigurowany w przeglądarce użytkownika i przekierować go do języka, który posiada Twoja sieć. Właśnie tak:

RewriteCond %{HTTP:Accept-Language} ^(en|ja|de|zh|fr|it|nl|fi|sv|no) [NC] 
RewriteRule ^$ /en [R=303,L,QSA] 

i co chcesz w swoim podejściu jest, aby mieć bezpośredni dostęp do statycznych plików z serwera, to można osiągnąć ustawiając ten warunek, pliki statyczne więc nie daj się rewrited

RewriteCond %{REQUEST_FILENAME} !-f 
Powiązane problemy