Zur Navigation

htaccess subdomain

mit unterverzeichnissen

1 aleman_gc

Hallo,
ich habe auf meinem Server meine Subdomain "wsneu" in einen unterordner umgeleietet.

RewriteCond %{HTTP_HOST} ^wsneu\.
RewriteCond %{REQUEST_URI} !^/wsneu/$ [NC]
RewriteRule (.*) /wsneu/$1 [L]

Klappt wunderbar!
Rufe ich wsneu.<domain> auf wird meine index.php aufgrufen. die sich im Unterorder ./wsneu befinded.

Nun möchte ich zusätzlich alle "unterordner" wie wsneu.<domain>/contact/ oder wsneu.<domain>/info/cat1
auch auf meine index.php haben, NATÜRLICH die "unterorder" /contact/ oder /info/cat1 als requestparameter auswertbar.

Welche rewriterule muss ich anwenden, ohne das meine Files wie wsneu.<domain>/style.css tangiert werden.

Vielen Dank
Peter aus Gran Canaria

29.12.2011 22:49

2 Jörg

Zitat von aleman_gc
Nun möchte ich zusätzlich alle "unterordner" wie wsneu.<domain>/contact/ oder wsneu.<domain>/info/cat1
auch auf meine index.php haben, NATÜRLICH die "unterorder" /contact/ oder /info/cat1 als requestparameter auswertbar.

Was genau meinst du mit "auf meine index.php haben" - dass alle URLs der Unterordner auf /wsneu/index.php rewritet werden sollen? dazu musst du in der betreffenden Rule statt "$1" einfach "index.php" einsetzen

Welche rewriterule muss ich anwenden, ohne das meine Files wie wsneu.<domain>/style.css tangiert werden.

Um real existierende Files vom Rewrite auszuschließen, kannst du die Nicht-Existenz in einer zusätzlichen RewriteCond prüfen:

RewriteCond %{REQUEST_FILENAME} !-f

29.12.2011 23:29 | geändert: 29.12.2011 23:29

3 aleman_gc

Hallo,
erstmal danke für die schnelle info
habe jetzt folgendes eingebunden
RewriteCond %{HTTP_HOST} ^wsneu\.
RewriteCond %{REQUEST_URI} !^/wsneu/$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /wsneu/index.php [L]

die "Unterdirectories" kommen im index.php an, aber die Files wie wsneu/style,.css ebenfalls, d.h. werden zum index.php weitergeleitet.

irgendeine idee?

30.12.2011 01:33

4 Jörg

Das Problem ist wohl, dass du hier versuchst zwei Dinge zu kombinieren:

1. per mod_rewrite einen Pseudo-VirtualHost zu realisieren

2. den Rewrite aller nicht existenten Dateien auf die index.php

Punkt 1. würde man normalerweise nicht mit mod_rewrite, sondern mit einer VirtualHost-Konfiguration umsetzen; mod_rewrite würde ich alternativ höchstens dann einsetzen, wenn es anders nicht ginge (z.B. weil der Webhoster eine solche Konfiguration nicht zulässt)

Punkt 2 sollte ohne Punkt 1 eigentlich problemlos laufen. Durch den Rewrite auf das Unterverzeichnis stimmt REQUEST_FILENAME aber nicht mehr überein

Spricht denn irgendwas dagegen, für wsneu.<domain> einen eigenen VirtualHost zu definieren? das wäre wie gesagt der normale Weg

Andernfalls könntest du noch versuchen, Dateien anhand der Endung vom Rewrite ausszuschließen

RewriteCond %{REQUEST_URI} !\.css$

30.12.2011 10:50 | geändert: 30.12.2011 10:52

5 aleman_gc

Mit den Endungen hat nichts gebracht!
Das problem ist, dass viele Subdomains in einem Virtual Host eingebunden sind. UInd die stammt nicht von mir.
Darf ich Dir die Virtualhost-Definition mal per PN schicken?
Gruß Peter

30.12.2011 11:56

6 Jörg

Das problem ist, dass viele Subdomains in einem Virtual Host eingebunden sind.

Und es ist nicht möglich, zumindest für diese Subdomain einen eigenen VirtualHost anzulegen?

Darf ich Dir die Virtualhost-Definition mal per PN schicken?

Ja, kannst du machen. Alternativ könntest du den Namen der Second-Level-Domain durch "example.com" ersetzen, so dass auch andere Leser dieses Threads die Problematik nachvollziehen können.

30.12.2011 12:32

7 aleman_gc

Vielen Dank..
der "problematische Abschnitt" ist in der Mitte und fett markiert.
wie gesagt, ich möchte die subdomain wsneu.example,com auf
/wsneu/index.php umleiten sowie alle nicht existierenden unterpfade wie
wsneu.example,com/contact

<VirtualHost xx.xxx.xxx.xxx>
    ServerAdmin support@EXAMPLE.com
    ServerName EXAMPLE.com
    ServerAlias *.EXAMPLE.com 
    # ServerAlias www.EXAMPLE.com
    HostnameLookups Off
    UseCanonicalName Off
    ServerSignature On
    Alias /error/ "/srv/www/vhosts/web000/html/error/"
    DocumentRoot /srv/www/vhosts/web000/html
    <Directory "srv/www/vhosts/web000/html">
	Options -Indexes +FollowSymLinks MultiViews
	AllowOverride None
	Order deny,allow
	Allow from all
    </Directory>
    <Directory "srv/www/vhosts/web000/html/ff24">
	Options -Indexes +FollowSymLinks MultiViews
	AllowOverride All
	Order deny,allow
	Allow from all
    </Directory>
    <Directory "srv/www/vhosts/web000/html/fwr">
	Options -Indexes +FollowSymLinks MultiViews
	AllowOverride All
	Order deny,allow
	Allow from all
    </Directory>
    <Directory "srv/www/vhosts/web000/html/vvg">
	Options -Indexes +FollowSymLinks MultiViews
	AllowOverride All
	Order deny,allow
	Allow from all
    </Directory>
    
   <Directory "srv/www/vhosts/web000/html/intern">
        Options -Indexes +FollowSymLinks MultiViews
        #AccessFileName .htaccess
#	AllowOverride All
#        AllowOverride AuthConfig
#	Order deny,allow
#        Allow from all
    </Directory>


    ErrorLog /srv/www/vhosts/web000/log/web000-error_log
    AddType application/x-httpd-php .html .php
    CustomLog /srv/www/vhosts/web000/log/web000-access_log combined
    <IfModule mod_php5.c>
       php_value include_path ".:/srv/www/vhosts/web000/includes:/usr/share/php5:/usr/share/php5/PEAR"
       php_admin_value doc_root "/srv/www/vhosts/web000/html"
       php_admin_value upload_tmp_dir "/srv/www/vhosts/web000/tmp"
       php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fphp-sender@EXAMPLE.com"
    </IfModule>
    DirectoryIndex index2.html
    <IfModule mod_rewrite.c>
       RewriteEngine On

#	RewriteCond %{HTTP_HOST} !^(ff24|vvg|control|www)\. [NC]
#	RewriteRule ^(.*)/$ http://www.EXAMPLE.com/error/ [L]

	RewriteCond %{HTTP_HOST} ^control\.
	RewriteCond %{REQUEST_URI} !^/control/$ [NC]
	RewriteRule (.*) /control/$1 [L]

##hh1
	RewriteCond %{HTTP_HOST} ^tool\.
	RewriteCond %{REQUEST_URI} !^/tool/$ [NC]
	RewriteRule (.*) /tool/$1 [L]
   <Directory "srv/www/vhosts/web000/html/tool">
    DirectoryIndex index.php
   </Directory>

##HIERT IOST DAS PROBLEM
	RewriteCond %{HTTP_HOST} ^wsneu\.
    RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_URI} !^/wsneu/$ [NC]
	RewriteRule (.*) /wsneu/index.php [L]
#	RewriteRule (.*) /wsneu/$1 [L]
    <Directory "srv/www/vhosts/web000/html/wsneu">
    DirectoryIndex index.php
   </Directory>
###ENDE


##hh2
	RewriteCond %{HTTP_HOST} ^counter\.
	RewriteCond %{REQUEST_URI} !^/counter/$ [NC]
	RewriteRule (.*) /counter/$1 [L]
   <Directory "srv/www/vhosts/web000/html/counter">
    DirectoryIndex index.php
   </Directory>

##hh3
	RewriteCond %{HTTP_HOST} ^sdomain\.
	RewriteCond %{REQUEST_URI} !^/sdomain/$ [NC]
	RewriteRule (.*) /sdomain/$1 [L]

   <Directory "srv/www/vhosts/web000/html/sdomain">
    DirectoryIndex index.php
   </Directory>



	#+++neu 2010-07-27: neue subdomain intern.EXAMPLE.com
        RewriteCond %{HTTP_HOST} ^intern\.
        RewriteCond %{REQUEST_URI} !^/intern/$ [NC]
        RewriteRule (.*) /intern/$1 [L]

	RewriteCond %{HTTP_HOST} ^ff24\.
	RewriteCond %{REQUEST_URI} !^/ff24/$ [NC]
	RewriteRule (.*) /ff24/$1 [L]

	RewriteCond %{HTTP_HOST} ^fwr\.
	RewriteCond %{REQUEST_URI} !^/fwr/$ [NC]
	RewriteRule (.*) /fwr/$1 [L]

	RewriteCond %{HTTP_HOST} ^vvg\.
	RewriteCond %{REQUEST_URI} !^/vvg/$ [NC]
	RewriteRule (.*) /vvg/$1 [L]

	###+++
        #RewriteCond %{HTTP_HOST} ^www\.
        #RewriteCond %{REQUEST_URI} !^/$ [NC]
        #RewriteRule (.*) /$1 [L]

        #RewriteCond %{HTTP_HOST} ^\.
        #RewriteCond %{REQUEST_URI} !^/$ [NC]
        #RewriteRule (.*) /$1 [L]
	###+++

	RewriteCond %{HTTP_HOST} ^EXAMPLE\.com(.*)
	RewriteRule (.*) http://www.EXAMPLE.com$1 [L,R=301]
	RewriteRule ^(.*)\.htm$ $1.html [R=permanent]
	RewriteRule ^(.*)/$ /index.html?id=$1 [QSA]


#test	RewriteCond %{HTTP_HOST} ^EXAMPLE\.com [NC]
#test	RewriteRule (.*) http://www.EXAMPLE.com$1 [R=301,NC]
#test	RewriteRule ^(.*)\.htm$ $1.html [R=permanent]
#test	RewriteRule ^(.*)/$ /index.html?id=$1 [QSA]
#test	RewriteCond %{THE_REQUEST} ^[^/]*/index\.html [NC]
#test	RewriteRule . / [R=301,L]
#test	RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC]
#test	RewriteRule . / [R=301,L]

    </IfModule>
    ErrorDocument 400 /error/400.php
    ErrorDocument 401 /error/401.php
    ErrorDocument 403 /error/403.php
    ErrorDocument 404 /error/404.php
    ErrorDocument 405 /error/405.php
    ErrorDocument 408 /error/408.php
    ErrorDocument 410 /error/410.php
    ErrorDocument 411 /error/411.php
    ErrorDocument 412 /error/412.php
    ErrorDocument 413 /error/413.php
    ErrorDocument 414 /error/414.php
    ErrorDocument 415 /error/415.php
    ErrorDocument 500 /error/500.php
    ErrorDocument 501 /error/501.php
    ErrorDocument 502 /error/502.php
    ErrorDocument 503 /error/503.php
    ErrorDocument 506 /error/506.php
</VirtualHost>

30.12.2011 13:25

8 Jörg

    ServerAlias *.EXAMPLE.com 
##HIERT IOST DAS PROBLEM
	RewriteCond %{HTTP_HOST} ^wsneu\.
    RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_URI} !^/wsneu/$ [NC]
	RewriteRule (.*) /wsneu/index.php [L]
#	RewriteRule (.*) /wsneu/$1 [L]
    <Directory "srv/www/vhosts/web000/html/wsneu">
    DirectoryIndex index.php
   </Directory>
###ENDE

Ich würde das nicht so machen, sondern für jede Subdomain eine eigene VirtualHost-Datei anlegen, in welcher du dann auch jeweils einen eigenen DocumentRoot-Ordner definieren kannst. Die Direktiven, die überall gleich sein sollen, kannst du ja überall rein kopieren (oder dazu einfach eine VirtualHost-Vorlagedatei erstellen, die du dann einfach nur noch mit den spezifischen Daten auffüllen musst)

Das Umleiten der Subdomains per mod_rewrite auf ihre Unterordner würde ich wie gesagt höchstens als Notlösung nehmen, wenn nicht anders möglich. Sobald mod_rewrite auch noch zu anderen Zwecken auf den Subdomains verwendet werden soll, kann dies sonst zu Problemen führen, wie in dem vorliegenden Fall

30.12.2011 14:23

9 aleman_gc

Ok, werde mich da mal reinarbeiten.
wie gesagt, die Konfiguration ist nicht von mir und ist sehr verzwickt.
Ich bin nicht so ganz firm mit "mod_rewrite" und habe Angst, die anderen subdomains und die hauptdoman zu "zerstören"

Nochmal velen Dank erstmal und ein glückliches 2012!

30.12.2011 14:30

10 Jörg

Ich bin nicht so ganz firm mit "mod_rewrite" und habe Angst, die anderen subdomains und die hauptdoman zu "zerstören"

Erstens würde ich vor kritischen Änderungen immer ein Backup machen, das du schnell wieder einspielen kannst, und zweitens vorab das ganze auf dem lokalen Rechner testen. Für zweiteres benötigst du ja nur einen Webserver (unter Windows z.B. XAMPP) - die betreffenden Domains kannst du während der Testphase über die hosts Datei auf den lokalen Webserver umlenken. So kannst du dann in Ruhe probieren.

30.12.2011 16:58