htaccess переписать правила с помощью mod_GeoIP - PullRequest
15 голосов
/ 02 февраля 2012

У меня проблемы с mod_geoip для сайта электронной коммерции, в котором есть 3 разных магазина. У нас есть основной магазин в root / store, но также есть магазины в root / ukstore и root / austore. Основной корень / хранилище содержит каталоги / 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 и images пытаются переписать в 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>

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 25 июня 2013

Проблема заключается в том, что вы используете условия перезаписи в контексте .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.

0 голосов
/ 06 ноября 2013

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
...