2012-11-07 12 views
7

Sytuacjamod_rewrite wybrać folder dla domeny

Używam Zend Framework, a więc próbować wywołać folder adres kończy się fiaskiem i dostaje błąd: „Nieprawidłowy sterownik określony”. Musiałem podłączyć dodatkowe forum do aplikacji w oddzielnym folderze. Zmienić plik .htaccess następująco:

RewriteRule ^forum(.*)$ forum$1 [L] 

i przez jakiś czas było dobrze, aż zdałem sobie sprawę z faktu, że strona istnieje w dwóch wersjach w dwóch domenach (PHP rozpoznaje domenę [.pl/.pl ] i wybiera język). Postanowiłem więc oddzielić fora jako dwa osobne moduły (na przykład folder dla polskiego forum wersji będzie: forum_pl, a dla Wielkiej Brytanii będzie to: forum_uk - dwa różne fora)

Na czym polega problem?

Trzeba przerobić plik .htaccess pracować tak:

IF: www.domena.pl/forum

wówczas: otwarty do skryptu z folderu/forum_pl

IF: www.domain.co.uk/forum

THEN: otwarty na skrypt z folderu/forum_uk.

Najgorsze jest to, że gdy próbowałem naprawić plik .htaccess dodając RewriteCond, to pierwsze przekierowanie przestało działać poprawnie, nawet po powrocie do oryginalnej wersji (pokazanej powyżej).

Proszę mi pomóc i przepraszam, jeśli nie znalazłem odpowiedzi już wcześniej podanych.

EDIT:

Pierwszy roboczy roztwór

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L] 
RewriteRule ^forum_uk(.*)$ forum_uk$1 [L] 
RewriteCond %{HTTP_HOST} ^www.domena.pl(.*) [NC] 
RewriteRule ^forum(.*)$ forum_pl$1 [L] 
RewriteCond %{HTTP_HOST} ^www.domain.co.uk(.*) [NC] 
RewriteRule ^forum(.*)$ forum_uk$1 [L] 

To wyglądało, że chce pracować, ale problemy, które wymaga rozwiązania jest (TODO):

  1. kiedy typ: www.domain.pl/forum trafia na stronę www.domain.pl/forum_pl/, ale jeśli wpiszesz: www.domain.pl/forum/ to przeniesie Cię do www.do main.pl/forum/ (przeczytaj z forum_pl). Jak sprawić, żeby to działało w pierwszej sytuacji tak samo, jak w drugim.

EDIT:

Moje ostatnie rozwiązanie:

#FORUM 
#PL 
RewriteCond %{REQUEST_URI} ^/forum$ [NC] 
RewriteRule ^(.*)$ forum/ [R=301,L] 

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L] 

RewriteCond %{REQUEST_URI} ^/forum_pl(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.domena.pl/forum/ [R=301,L] #Dosen't work properly (?) 

RewriteCond %{HTTP_HOST} ^www.domena.pl(.*) [NC] 
RewriteCond %{REQUEST_URI} ^/forum(/?)$ [NC] 
RewriteRule ^forum[^/](.*)$ forum_pl/$1 #Dosen't work properly, but without it crash! 
RewriteRule ^forum(.*)$ forum_pl$1 [L] 
#UK 
RewriteCond %{REQUEST_URI} ^/forum_uk(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.domain.co.uk/forum/ [R=301,L] #Dosen't work properly (?) 

RewriteCond %{HTTP_HOST} ^www.domain.co.uk(.*) [NC] 
RewriteCond %{REQUEST_URI} ^/forum(/?)$ [NC] 
RewriteRule ^forum[^/](.*)$ forum_uk/$1 #Dosen't work properly, but without it crash! 
RewriteRule ^forum(.*)$ forum_uk$1 [L] 

Ostateczna wersja robocza:

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L] 
RewriteRule ^forum_uk(.*)$ forum_uk$1 [L] 

RewriteRule ^forum_pl(.*)$ http://www.domena.pl/forum$1 [R=301,L] # Not working! 
RewriteRule ^forum_uk(.*)$ http://www.domain.co.uk/forum$1 [R=301,L] # Not working! 

# Normalize URL first: 
RewriteRule ^forum$ forum/ [R=301,L] 

# redirect to polish version of web under forum_pl if on .pl TLD and 
# request is made to /forum/ (already normalized) 
RewriteCond %{HTTP_HOST} =www.domena.pl [NC] 
RewriteRule ^forum(.*)$ forum_pl$1 [L] 

# redirect to english version of web under forum_en in on .uk TLD and 
# request is made to /forum/ 
RewriteCond %{HTTP_HOST} =www.domain.co.uk [NC] 
RewriteRule ^forum(.*)$ forum_uk$1 [L] 

Szkoda, że ​​można zadzwonić z twoje czoło ser forum_uk i foldery forum_pl ręcznie.

Odpowiedz

1

Nie jestem pewien, czy poprawnie zorientowany w długiej pytanie z jakiegoś ewolucji :-) Spróbujmy tak:

# Normalize URL first: 
RewriteRule ^forum$ forum/ [R=301,L] 

# redirect to polish version of web under forum_pl if on .pl TLD and 
# request is made to /forum/ (already normalized) 
RewriteCond %{HTTP_HOST} =www.domena.pl [NC] 
RewriteRule ^forum/(.*)$ http://www.domena.pl/forum_pl/$1 [R=301,L] 

# redirect to english version of web under forum_en in on .uk TLD and 
# request is made to /forum/ 
RewriteCond %{HTTP_HOST} =www.domain.co.uk [NC] 
RewriteRule ^forum/(.*)$ http://www.domain.co.uk/forum_uk/$1 [R=301,L] 

Jeśli potrzebujesz rewites działać inaczej, daj mi znać

+0

Dzięki za odpowiedź ! Ale ostatecznie nie jest to dokładnie to, czego szukam. Teraz działa to tak: www.domena.pl/forum otwiera www.domena.pl/forum_pl/ www.domain.co.uk/forum otwiera www.domena.pl/forum_uk/ I don ' t chcesz _pl i _uk w url :) – MrTomAsh

+0

@ user1532418, więc chcesz wziąć skrypty z folderów forum_pl i forum_uk odpowiednio, ale chcesz zachować/forum/w pasku adresu przeglądarki? Jeśli tak, musisz usunąć 'R = 301' - przekierowuje, więc pasek adresu w przeglądarce odzwierciedla zmianę –

+0

Jakoś zaczyna działać! Dzięki! – MrTomAsh