htaccess - пренасочването на подпапка не работи

Имам проблем с пренасочване .htaccess и се надявам някой да ми помогне (опитах 1,5 часа...).

Какво искам да направя:
1) Пренасочвам mydomain.com/en/ към mydomain.com (скривам папката)
2) Продължавам да използвам подпапката mydomain.com/fr/ или mydomain.com/es както обикновено

Моят htaccess файл (намира се в главната папка, а не (!) в /en/):

RewriteEngine on  
RewriteCond %{REQUEST_URI} !^en/  
RewriteRule ^(.*)$ en/$1 [L]

Какво прави:
1) Работи: Пренасочването от mydomain.com/en/ към mydomain.com работи
2) Проблем: Когато въведа mydomain.com/fr/ той пренасочва към mydomain.com/en/fr /

Въпрос:
Как мога да накарам това пренасочване да работи само в папката /en/, а не в другите папки?
Така че mydomain.com/fr/ ще остане просто mydomain.com/fr/?

Много благодаря за твоята помощ!


person Student    schedule 20.01.2014    source източник


Отговори (1)


Опитайте да добавите допълнителна проверка:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^en/  
RewriteRule ^(.*)$ en/$1 [L]

or

RewriteCond %{DOCUMENT_ROOT}/en%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/en%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} !^en/  
RewriteRule ^(.*)$ en/$1 [L]

За да премахнете папката:

RewriteCond %{THE_REQUEST} \ /+en/([^\ \?]*)
RewriteRule ^ /%1 [L,R]
person Jon Lin    schedule 20.01.2014
comment
За съжаление и двата варианта не работят. Те не крият папката, така че тя остава на mydomain.com/en/ (сякаш нищо няма в htaccess). - person Student; 21.01.2014
comment
@Student това пренаписва само за URL адреси, които нямат /en/ отпред. Моделът е ^(.*)$ (всичко), а целта на правилото е /en/(всичко). Няма правило за пренасочване на URL като /en/something към /something, това е съвсем различно и е външно - person Jon Lin; 21.01.2014
comment
Не го карам да работи както трябва. Искам да пренасоча потребителя в зависимост от неговия IP адрес към езикова версия. Така потребител от Франция ще бъде пренасочен към mydomain.com/fr/, когато въведе mydomain.com (това се прави чрез Javascript API от Maxmind и работи). Единственото нещо, което не (!) искам да се случи, е англоговорящ потребител да отиде на mydomain.com/en. Вместо това URL адресът трябва да бъде просто mydomain.com. Когато добавя двата реда код, които ми дадохте за премахване на папката, получавам безкраен цикъл, защото използва файла в главната директория вместо този в подпапка /en. - person Student; 21.01.2014
comment
@Student google geoip, всичко това е далеч извън обхвата на вашия въпрос - person Jon Lin; 21.01.2014
comment
@Student plus, тези правила работят идеално за мен, без цикли - person Jon Lin; 21.01.2014
comment
Ти си прав. Мислех, че може да има просто решение на проблема, но изглежда като сложна задача. Благодаря за помощта ти, Джон Лин! - person Student; 21.01.2014
comment
Да, самите правила работят. Цикълът се създава, защото javascript кодът в моя индексен файл в главната папка се използва отново и отново (вместо да се използва index.html в подпапка /en). - person Student; 21.01.2014