Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Apache2/mod_rewrite third-level domény ze všech podadresářů
#1

Dlouho jsem na netu hledal, našel jen střípky a povedlo se mi z toho stvořit funkční automatické tvoření domén třetího řádu (ashus.net/chat > chat.ashus.net a podobně) všech existujících podadresářů. Pro rozjetí je třeba Apache2 webserver a mod_rewrite plugin (standardně v instalačním balíku, stačí povolit).


Dále připravíme náš konfigurační soubor v sites podle tohoto:
Code:
    ServerName www.ashus.net

    

    #pokud směrujeme ze staré domény na novou - ashw.info > ashus.net
    RewriteEngine On
    RewriteCond %{SERVER_NAME} ([^.]+)\.ashw\.info$
    RewriteRule ^/(.*)$ http://%1.ashus.net/$1 [R=301]


    #vstup do vybraných adresářů přesměruje na https
    RewriteEngine On
    RewriteCond %{SERVER_NAME} \.ashus\.net$
    RewriteCond %{SERVER_NAME} ^mail\. [OR]
    RewriteCond %{REQUEST_URI} ^/(admin|client|mail).*/
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI}


    #vstup na hlavní www server do adresáře /ashus > ashus.ashus.net
    RewriteEngine On
    RewriteCond %{SERVER_NAME} ^www\.ashus\.net$
    RewriteCond %{REQUEST_URI} ^/ashus/
    RewriteRule ^/ashus/(.*)$ http://ashus.ashus.net/$1 [R=301]


    #ip adresa > http://www.ashus.net/
    RewriteEngine On
    RewriteCond %{SERVER_NAME} ^\[[0-9a-f:]+\]$ [OR]
    RewriteCond %{SERVER_NAME} ^([0-9\.]+)$
    RewriteRule ^/(.*)$ http%{ENV:secure_char}://www.ashus.net/$1 [R=301,L]


    #odstranujeme www pokud se nejedna o domovskou adresu
    #napr. www.ashus.ashus.net > ashus.ashus.net
    RewriteEngine On
    RewriteCond %{SERVER_NAME} !^www\.ashus\.net$
    RewriteCond %{SERVER_NAME} ^www\.(.*)
    RewriteRule ^(.*) http://%1$1 [R,L]


    #pridavame www pokud se jedna o domovskou adresu
    #tj. ashus.net > www.ashus.net
    RewriteEngine On
    RewriteCond %{SERVER_NAME} ^ashus\.net$
    RewriteRule ^(.*) http://www.ashus.net$1 [R,L]


    #tvoříme third level domény ze všeho, co tu není ve výjímkách
    RewriteEngine On
    #zbytek názvu serveru musí být ashus.net (jinak by mohly vznikat chyby)
    RewriteCond %{SERVER_NAME} \.ashus\.net$
    #veškeré www.ashus.net funguje jako bez www, netvoříme zbytečný adresář /var/www/www
    RewriteCond %{SERVER_NAME} !^www\.
    #doména ap funguje jako www - je vyjímka
    RewriteCond %{SERVER_NAME} !^ap\.
    #ikony pro indexy adresářů a chybové hlášky jsou globální po všechny domény
    RewriteCond %{REQUEST_URI} !^/icons/
    RewriteCond %{REQUEST_URI} !^/error/
    #nepotřebujeme více css stylů, globální pro všechny domény
    RewriteCond %{REQUEST_URI} !^/css.css$


    #načteme začátek názvu serveru až po první tečku = název podadresáře
    RewriteCond %{HTTP_HOST} ^([^.]+)\.
    #provádíme obecné redirecty do adresářů
    RewriteRule ^/(.*)$ /%1/$1 [L]

    

 

Nakonec nezapomeňte přidat DNS záznam k vaší doméně (A záznam *.ashus.net > IPadr). Moc hezky to jde v administraci Forpsi (na Pipni si ani nepipnete).

Pokud si přečtete manuál k RewriteCond, bude vám jasné, že: ! je negace, ^ je začátek řetězce, $ je konec řetězce a každá tečka se musí escapovat na "\.". Je to tedy jeden z regexpů.
Každé "RewriteEngine On" resetuje předchozí podmínky a začne novou sadu podmínek.
Proměnná SERVER_NAME odpovídá adrese serveru "chat.ashus.net", IP adrese nebo i "chat_u_ashe" (pokud přistupujeme přes název v hosts).
Proměnná REQUEST_URI obsahuje celé URI za názvem serveru včetně lomítka.

Hodně zdaru a trpělivosti, příkladů tady máte snad dost.

[Image: kavove-zrnka-lajna.jpg]
Coffee phreak!
Reply
#2

Zdravim

Taky mam ten problem s hledanim stripku... mam to nastavene takto


NameVirtualHost *:80

UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\" " vcommon
CustomLog "/var/log/httpd/access.log" vcommon
Options -Indexes
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+\.[a-z]+)$
RewriteRule ^(.*)$ http://www.%1$1 [R=301,L]

VirtualDocumentRoot /var/www/html/%-2.0.%-1/%-3+
#VirtualScriptAlias /var/www/%-2.0.%-1/%-3+/cgi-bin



Akorat nejsem schopny rozchodit ssl a logovani tak, aby kazdy web mel svuj log

Jestli mate nejakou radu prosim smerujte ji na bbaf (at) twe.cz
Reply
#3

bbaf:
Rewrite mam na začátku konfiguráku.

Code:
    ServerName www.ashus.net
    RewriteEngine On
    RewriteOptions Inherit




  
    ErrorLog /var/log/apache2/secure-error.log
    TransferLog /var/log/apache2/secure-access.log
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCACertificateFile /etc/ssl/cert.ca
    SSLCertificateFile /etc/ssl/cert.crt
    SSLCertificateKeyFile /etc/ssl/cert.keu
    SSLOptions +StdEnvVars
    
    RewriteEngine On
    RewriteOptions Inherit

Co takhle použít podle manuálu:
CustomLog "/var/log/httpd/access-%V.log" vcommon

[Image: kavove-zrnka-lajna.jpg]
Coffee phreak!
Reply




Users browsing this thread: