2012-11-07 4 views
7

Situationmod_rewrite wählen Sie einen Ordner für die Domäne

Ich verwende Zend Framework und damit versuchen, den Ordner-Adresse zu nennen endet in einem Fiasko und wir erhält die Fehlermeldung: ‚Ungültige Controller angegeben‘. Ich musste zusätzliches Forum zur Anwendung in einem unterschiedlichen Ordner anschließen. Ich wechsle .htaccess-Datei wie folgt:

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

und für eine Weile war es gut, bis ich die Tatsache erkannt, dass die Seite in zwei Versionen in zwei Domänen besteht (php erkennt Domain [.pl/.co.uk ] und wählt die Sprache). Also habe ich beschlossen, Foren als zwei separate Module zu trennen (zum Beispiel, der Ordner für polnische Version Forum wird: forum_pl, und für UK wird es sein: forum_uk - zwei verschiedene Foren)

Was ist das Problem?

Es muss .htaccess-Datei neu zu schreiben, wie dies funktioniert:

IF: www.domena.pl/forum

THEN: offen für das Skript aus dem Ordner/forum_pl

IF: www.domain.co.uk/forum

DANN: Öffnen Sie das Skript aus dem Ordner/forum_uk.

Das Schlimmste ist, dass, wenn ich versucht, zu beheben. Htaccess-Datei RewriteCond hinzufügen dann funktioniert die erste Umleitung nicht mehr richtig, auch nach der Rückkehr auf die ursprüngliche (siehe oben) Version.

Bitte helfen Sie mir und entschuldigen Sie, wenn ich die Antworten nicht bereits früher gefunden habe.

EDIT:

Erste Arbeitslösung

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] 

Es ist aussehen wie es will, aber arbeiten, Probleme, die Lösung braucht, ist (TODO):

  1. Wenn Sie type: www.domain.pl/forum es bringt dich zu www.domain.pl/forum_pl/ aber wenn du tippst: www.domain.pl/forum/ es bringt dich zu www.do main.pl/forum/ (lesen Sie aus forum_pl). Wie man macht, dass es in der ersten Situation gleich funktioniert, wie in der Sekunde.

EDIT:

Meine letzte Lösung:

#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] 

Finale, Arbeitsversion:

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] 

Es ist schade, dass Sie aus anrufen deine Braue ser forum_uk und forum_pl Ordner manuell.

Antwort

1

nicht sicher, ob ich das richtig in Ihre lange Frage mit einer gewissen Entwicklung orientiert :-) Lets try this:

# 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] 

Wenn Sie die rewites müssen, anders zu handeln, lassen Sie mich wissen

+0

Vielen Dank für Antwort ! Aber es ist schließlich nicht genau das, wonach ich suche. Jetzt funktioniert es so: www.domena.pl/forum öffnet www.domena.pl/forum_pl/ www.domain.de/forum öffnet www.domain.co.uk/forum_uk/ I don ' t wollen _pl und _uk in der URL :) – MrTomAsh

+0

@ user1532418 also wollen Sie Skripte aus den Ordnern forum_pl und forum_uk nehmen, aber Sie wollen das/forum/in der Browser-Adressleiste? Wenn ja, müssen Sie das 'R = 301' entfernen - es wird umgeleitet, so dass die Adressleiste im Browser die Änderung widerspiegelt –

+0

Irgendwie fängt es an zu arbeiten! Vielen Dank! – MrTomAsh