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: 1 Guest(s)