Htaccess переписать правила с помощью mod_GeoIP
У меня возникли проблемы с mod_geoip для сайта электронной торговли, в котором есть 3 разных магазина. У нас есть наш главный магазин в корне/магазине, но также есть магазины у root/ukstore и root/austore. Основной root/store содержит директории /skin,/media и/js, которые содержат все css, изображения и javascripts. С этой текущей настройкой URL-адреса безупречно меняют базу, но оставляют остальную часть URL-адреса целыми, поэтому, если пользователь из Великобритании переходит в root/store/category/product/, он перенаправляется в root/ukstore/category/product/,
2 вещи, которые сейчас являются проблемами.
Всякий раз, когда клиент обращается к защищенной странице, такой как проверка или учетная запись, URL-адреса для css и javascript переписываются в root/ukstore/skin или root/ukstore/js. Есть ли что-то, что мне не хватает в отношении SSL для этих URL?
Во-вторых, если пользователь из Южной Африки обращается к магазину, он переписывается в магазин в Великобритании, и все изображения css, js, изображения полностью связаны с хранилищем/шкурой, но если пользователь из Соединенного Королевства обращается к магазину то URL-адреса для css, js и изображений пытаются переписать в root/ukstore/skin
Вот код в моем файле htaccess в root/store. Каждый магазин также имеет свой собственный файл htaccess, но без особого там.
<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>
Любая помощь будет принята с благодарностью!
Ответы
Ответ 1
Проблема заключается в том, что вы используете условия перезаписи в контексте .htaccess, поэтому условия должны относиться к каталогу, в котором вы находитесь, и именно поэтому условия перезаписи относительно скина js и медиа, упомянутые в вопрос не соответствует. Вы должны заменить их чем-то вроде:
RewriteRule ^(skin|media|js)/ - [L,NC]
или, как указано в руководстве mod_rewrite (http://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteRule)
Если вы хотите сопоставить полный URL-адрес в каждом каталоге (htaccess) RewriteRule, используйте переменную% {REQUEST_URI} в RewriteCond.
Ответ 2
Перенаправление на основе Ip может потерпеть неудачу, и то, что обычно требуется людям, - это перенаправление на основе языка. Вы можете прочитать язык, настроенный в браузере пользователя, и просто перенаправить их на язык, который есть в вашем Интернете. Точно так же:
RewriteCond %{HTTP:Accept-Language} ^(en|ja|de|zh|fr|it|nl|fi|sv|no) [NC]
RewriteRule ^$ /en [R=303,L,QSA]
И что вы хотите в своем подходе - иметь прямой доступ к статическим файлам на вашем сервере, это может быть достигнуто при установке этого условия, поэтому статические файлы не будут перезаписаны
RewriteCond %{REQUEST_FILENAME} !-f