Subdomains umleiten

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

Subdomains umleiten

Beitragvon EifX » 08.02.2010 15:45

Hallo liebe Boarduser,

ich habe ein kleines Problem mit, was sonst, mod_rewrite ;)

Also: Ich habe eine Website, die 4 Subdomains hat:

www.eifx.de
text.eifx.de
print.eifx.de
mobile.eifx.de

Nun möchte ich, das wenn jemand www.bla.de aufruft und dort Links öffnet wie "news" oder "blog" es in der Adresszeile so aussieht:
www.eifx.de/news oder www.eifx.de/blog; intern funktioniert das dann mit www.eifx.de/index.php?root=$1

Dies hab ich schon hinbekommen...

Nun soll wenn beispielsweise text.eifx.de aufgerufen wird, soll er auf www.eifx.de/index.php?root=$1&mode=text verlinken...

Auch das funktioniert schon... jedoch nur teilweise, weil nun das Erste nicht mehr funktioniert...

Hier mal das, was ich schon hab:

Code: Alles auswählen
ErrorDocument 403 /403_forbidden
ErrorDocument 404 /404_not_found
ErrorDocument 501 /501_not_implemented

RewriteEngine On
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]

RewriteCond %{HTTP_HOST} ^mobile\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=mobile [QSA]
RewriteCond %{HTTP_HOST} ^print\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=print [QSA]
RewriteCond %{HTTP_HOST} ^text\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=text [QSA]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]
EifX
.
.
 
Beiträge: 9
Registriert: 08.02.2010 13:27

Re: Subdomains umleiten

Beitragvon kartoffelkopf » 08.02.2010 16:58

EifX hat geschrieben:Hallo liebe Boarduser,

ich habe ein kleines Problem mit, was sonst, mod_rewrite ;)

Also: Ich habe eine Website, die 4 Subdomains hat:

www.eifx.de
text.eifx.de
print.eifx.de
mobile.eifx.de

Nun möchte ich, das wenn jemand www.bla.de aufruft und dort Links öffnet wie "news" oder "blog" es in der Adresszeile so aussieht:
www.eifx.de/news oder www.eifx.de/blog; intern funktioniert das dann mit www.eifx.de/index.php?root=$1

Dies hab ich schon hinbekommen...

Nun soll wenn beispielsweise text.eifx.de aufgerufen wird, soll er auf www.eifx.de/index.php?root=$1&mode=text verlinken...

Auch das funktioniert schon... jedoch nur teilweise, weil nun das Erste nicht mehr funktioniert...

Hier mal das, was ich schon hab:

Code: Alles auswählen
ErrorDocument 403 /403_forbidden
ErrorDocument 404 /404_not_found
ErrorDocument 501 /501_not_implemented

RewriteEngine On
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]

RewriteCond %{HTTP_HOST} ^mobile\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=mobile [QSA]
RewriteCond %{HTTP_HOST} ^print\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=print [QSA]
RewriteCond %{HTTP_HOST} ^text\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=text [QSA]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]


Wenn Du extern umleitest, wird auch die Adresszeile geaendert, wenn nicht P(Proxy) als Flag gesetzt ist.
Mit

Code: Alles auswählen
RewriteRule ^(.*)$ /index.php?root=$1&view=text [QSA]


sollte es funktionieren.
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Re: Subdomains umleiten

Beitragvon EifX » 08.02.2010 17:07

kartoffelkopf hat geschrieben:
EifX hat geschrieben:Hallo liebe Boarduser,

ich habe ein kleines Problem mit, was sonst, mod_rewrite ;)

Also: Ich habe eine Website, die 4 Subdomains hat:

www.eifx.de
text.eifx.de
print.eifx.de
mobile.eifx.de

Nun möchte ich, das wenn jemand www.bla.de aufruft und dort Links öffnet wie "news" oder "blog" es in der Adresszeile so aussieht:
www.eifx.de/news oder www.eifx.de/blog; intern funktioniert das dann mit www.eifx.de/index.php?root=$1

Dies hab ich schon hinbekommen...

Nun soll wenn beispielsweise text.eifx.de aufgerufen wird, soll er auf www.eifx.de/index.php?root=$1&mode=text verlinken...

Auch das funktioniert schon... jedoch nur teilweise, weil nun das Erste nicht mehr funktioniert...

Hier mal das, was ich schon hab:

Code: Alles auswählen
ErrorDocument 403 /403_forbidden
ErrorDocument 404 /404_not_found
ErrorDocument 501 /501_not_implemented

RewriteEngine On
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]

RewriteCond %{HTTP_HOST} ^mobile\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=mobile [QSA]
RewriteCond %{HTTP_HOST} ^print\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=print [QSA]
RewriteCond %{HTTP_HOST} ^text\.(.*) [NC]
RewriteRule ^(.*)$ http://www.eifx.de.localhost/index.php?root=$1&view=text [QSA]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]


Wenn Du extern umleitest, wird auch die Adresszeile geaendert, wenn nicht P(Proxy) als Flag gesetzt ist.
Mit

Code: Alles auswählen
RewriteRule ^(.*)$ /index.php?root=$1&view=text [QSA]


sollte es funktionieren.


Dank dir schon mal für deine schnelle Antwort :)
Ich hab deinen Rat in die Tat umgesetzt, jedoch klappt die ganze Geschichte noch nicht so wie ich das gern hätte ;)
mobile.eifx.de.localhost funktioniert perfekt, jedoch alles was danach kommt, also print.eifx.de.localhost usw. wirft ein Internal Server Error 500 zurück...

Hier noch mal die Version, wie es jetzt ist:

Code: Alles auswählen
ErrorDocument 403 /403_forbidden
ErrorDocument 404 /404_not_found
ErrorDocument 501 /501_not_implemented

RewriteEngine On
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]

RewriteCond %{HTTP_HOST} ^mobile\.(.*) [NC]
RewriteRule ^(.*)$ /index.php?root=$1&view=mobile [QSA]
RewriteCond %{HTTP_HOST} ^print\.(.*) [NC]
RewriteRule ^(.*)$ /index.php?root=$1&view=print [QSA]
RewriteCond %{HTTP_HOST} ^text\.(.*) [NC]
RewriteRule ^(.*)$ /index.php?root=$1&view=text [QSA]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]
EifX
.
.
 
Beiträge: 9
Registriert: 08.02.2010 13:27

Beitragvon kartoffelkopf » 08.02.2010 17:31

Wie lautet denn der Error 500? Die Rules sehen ja schon ziemlich aehnlich aus :)
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon EifX » 08.02.2010 17:41

Das wird mir ausgegeben:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.6 Server at print.eifx.de.localhost Port 80


Da hab ich mir die error.log dazu mal angeschaut... haben wir da jetzt ne Endlosschleife gebastelt?

[Mon Feb 08 17:38:56 2010] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
EifX
.
.
 
Beiträge: 9
Registriert: 08.02.2010 13:27

Beitragvon kartoffelkopf » 08.02.2010 18:14

Tatsaechlich ein Loop. HTTP_HOST mit (.*) ist halt nicht so gut.

Im Prinzip kannst Du den letzten Blick verkuerzen und im HTTP_HOST den Domainpart eintragen:

Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^(mobile|print|text).example.com [NC]
RewriteRule ^(.*)$ /index.html?root=$1&view=%1 [QSA,L]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon EifX » 08.02.2010 18:25

kartoffelkopf hat geschrieben:Tatsaechlich ein Loop. HTTP_HOST mit (.*) ist halt nicht so gut.

Im Prinzip kannst Du den letzten Blick verkuerzen und im HTTP_HOST den Domainpart eintragen:

Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^(mobile|print|text).example.com [NC]
RewriteRule ^(.*)$ /index.html?root=$1&view=%1 [QSA,L]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]


Hey, genialer Gedanke. Das macht die ganze Sache immerhin schon mal übersichtlicher ;). Leider bleiben die Fehlermeldungen die Gleichen :(
Man könnte das Problem ja auch in PHP lösen, jedoch find ich das eleganter wenn die htaccsess-Datei das übernimmt ;)

Mein Code jetzt:
Code: Alles auswählen
ErrorDocument 403 /403_forbidden
ErrorDocument 404 /404_not_found
ErrorDocument 501 /501_not_implemented

RewriteEngine On
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]
RewriteCond %{HTTP_HOST} ^(mobile|print|text).eifx.de.localhost [NC]
RewriteRule ^(.*)$ /index.php?root=$1&view=%1 [QSA,L]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]
EifX
.
.
 
Beiträge: 9
Registriert: 08.02.2010 13:27

Beitragvon kartoffelkopf » 08.02.2010 18:36

EifX hat geschrieben:
Mein Code jetzt:
Code: Alles auswählen
ErrorDocument 403 /403_forbidden
ErrorDocument 404 /404_not_found
ErrorDocument 501 /501_not_implemented

RewriteEngine On
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]
RewriteCond %{HTTP_HOST} ^(mobile|print|text).eifx.de.localhost [NC]
RewriteRule ^(.*)$ /index.php?root=$1&view=%1 [QSA,L]
RewriteRule ^(.*)$ /index.php?root=$1 [QSA,L]


Ich glaub, die CHAIN-Rules (C) sind irgendwie Asche. Ersetze mal [C] durch [F] und es sollte nicht mehr loopen.
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon EifX » 08.02.2010 19:21

So, nun hab ich ein 403 Forbidden auf allen Kanälen ;)

Forbidden

You don't have permission to access / on this server.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.6 Server at www.eifx.de.localhost Port 80
EifX
.
.
 
Beiträge: 9
Registriert: 08.02.2010 13:27

Beitragvon kartoffelkopf » 08.02.2010 19:48

EifX hat geschrieben:So, nun hab ich ein 403 Forbidden auf allen Kanälen ;)

Forbidden

You don't have permission to access / on this server.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.6 Server at www.eifx.de.localhost Port 80


Das ist schoen :wink:

Denkst Du nochmal ueber die 2 Regeln nach und was Du mit denen bezwecken wolltest. Es verbietet halt alles, was nicht index.php heisst oder include:


Code: Alles auswählen
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]


Der Error 500 kommt additional durch das !
Vielleicht willst Du ja sowas dabei bewirken:

Code: Alles auswählen
RewriteCond %{REQUEST_URI} !(index.php|/include) [NC]
RewriteRule ^/$ - [F]


Dann geht aber auch nur http://www.example.com/index.php und nicht mehr http://www.example.com
Also am besten die zwei Sachen weglassen...
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon EifX » 08.02.2010 20:14

kartoffelkopf hat geschrieben:
EifX hat geschrieben:So, nun hab ich ein 403 Forbidden auf allen Kanälen ;)

Forbidden

You don't have permission to access / on this server.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.6 Server at www.eifx.de.localhost Port 80


Das ist schoen :wink:

Denkst Du nochmal ueber die 2 Regeln nach und was Du mit denen bezwecken wolltest. Es verbietet halt alles, was nicht index.php heisst oder include:


Code: Alles auswählen
RewriteRule !index\.php - [C]
RewriteRule !include(.*) - [C]


Der Error 500 kommt additional durch das !
Vielleicht willst Du ja sowas dabei bewirken:

Code: Alles auswählen
RewriteCond %{REQUEST_URI} !(index.php|/include) [NC]
RewriteRule ^/$ - [F]


Dann geht aber auch nur http://www.example.com/index.php und nicht mehr http://www.example.com
Also am besten die zwei Sachen weglassen...


Vielleicht sollte ich an dieser Stelle dir erklären wie meine Website aufgebaut ist ;) Das was da steht ist richtig, genau so wie ich es wollte. Warum? Nun, ich führe vom Prinzip her nur die index.php im root-Verzeichnis aus und includiere (include halt ;)) alle Seiten, die ich für die aktuelle Anfrage benötige. Nebenbei läuft ein Templatesystem "Smarty" was ebenfalls von der index.php aufgerufen wird und den ganzen HTML-Bla erledigt...
Der Ordner "include" beinhaltet alles, was ich irgendwie extra in meine Website einbinden muss (Stylesheets, Javascripts, Bilder,...) und somit muss ich auch auf den zugreifen können. Die index.php Datei liegt im root-Verzeichnis, so gut wie alles andere liegt im Verzeichnis "run", wohin ich in der PHP-Datei hinnavigiere...
Somit soll man nur Zugriff auf den Ordner "include" und die Datei index.php haben. Alle anderen PHP-Dateien werden ja includet...

Mit dem Codeschnipsel von dir klappt es leider auch nicht, da hab ich dann wieder nen 500ter ;)

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.6 Server at www.eifx.de.localhost Port 80
EifX
.
.
 
Beiträge: 9
Registriert: 08.02.2010 13:27

Beitragvon kartoffelkopf » 11.02.2010 09:14

EifX hat geschrieben:
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.6 Server at www.eifx.de.localhost Port 80


Und was steht im ErrorLog?
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon EifX » 11.02.2010 10:35

Ebenfalls das übliche :) Leider...

[Thu Feb 11 10:33:15 2010] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
EifX
.
.
 
Beiträge: 9
Registriert: 08.02.2010 13:27


Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron