[ .htaccess ] – Subdomeny za pomocą .htaccess (serwer Apache)

Jak stworzyć subdomenę na serwerze i do czego może to posłużyć?

Jest to bardzo pomocne jeżeli mamy zamiar prowadzić kilka serwisów internetowych w jednej domenie (np. twojadomena.pl, twojdrugiserwis.twojadomena.pl).

Nawet jeżeli usługodawca nie umożliwia nam tego, bądź nie mamy takiej opcji w panelu admina (panelu zarządzania domeną), jest na to prosty sposób. Plik .htaccess

Poniżej opiszę najszybszy i najbardziej komfortowy sposób na uzyskanie żądanego efektu.

Załużmy że nasza domena to: twojadomena.pl w jej głównym katalogu (tam gdzie są pliki strony) na serwerze tworzymy katalog np: twojserwis oraz tworzymy plik .htaccess (jeżeli już jest to edytujemy go) i umieszczamy w nim zapis:

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?twojserwis.twojadomena.pl
RewriteCond %{REQUEST_URI} !twojserwis/
RewriteRule ^(.*)$ twojserwis/$1 [L]

UWAGA: Jeżeli plik .htacces już był i znajdowały się w nim poniższe linijki nie dodajemy ich po raz drugi, pomijamy je:

RewriteEngine On
Options +FollowSymlinks
RewriteBase /

dodajemy tylko:

RewriteCond %{HTTP_HOST} ^(www.)?twojserwis.twojadomena.pl
RewriteCond %{REQUEST_URI} !twojserwis/
RewriteRule ^(.*)$ twojserwis/$1 [L]

Efektem będzie uzyskanie adresu: twojserwis.twojadomena.pl oraz www.twojserwis.twojadomena.pl

Jeżeli chcielibyśmy dodać wiele serwisów i nie chcemy żeby nam się one mieszały z plikami domeny głównej, proponuje dodać katalog o nazwie np. serwisy i dopiero w nim dodawać foldery z subdomenami.

RewriteEngine On
Options +FollowSymlinks
RewriteBase /


RewriteCond %{HTTP_HOST} ^(www.)?ts.td.pl
RewriteCond %{REQUEST_URI} !serwisy/ts/
RewriteRule ^(.*)$ serwisy/ts/$1 [L]


RewriteCond %{HTTP_HOST} ^(www.)?ts2.td.pl
RewriteCond %{REQUEST_URI} !serwisy/ts2/
RewriteRule ^(.*)$ serwisy/ts2/$1 [L]


RewriteCond %{HTTP_HOST} ^(www.)?ts3.td.pl
RewriteCond %{REQUEST_URI} !serwisy/ts3/
RewriteRule ^(.*)$ serwisy/ts3/$1 [L]

Efektem będzie dodanie trzech subdomen ts.td.pl ts2.td.pl ts3.td.pl oraz www.ts.td.pl www.ts2.td.pl www.ts3.td.pl

Sposób sprawdzałem na kilku serwerach i działa bez problemu (home.pl, livenet.pl, hekko.pl i inne)

chmod pliku .htaccess powinien być ustawiony na 644

Uwaga!!! W wielu przypadkach (np. w hekko.pl) do prawidłowego działania należy włączyć funkcję Wildcard na serwerze.

 

edit 06-01-2013:

Wyróżniamy trzy przydatne rodzaje przekierowań subdomeny na katalog.

Poniżej podam jakie efekty uzyskamy danymi przekierowaniami. Do przykładów użyjemy znaku # który będzie nam zastępował dowolny ciąg znaków.

1) RewriteCond %{HTTP_HOST} ^(www.)?twojserwis.twojadomena.pl

Po wpisaniu do przeglądarki adresu:
www.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
twojserwis.twojadomena.pl – kieruje na katalog subdomeny
#twojserwis.twojadomena.pl – kieruje na katalog domeny
#.twojserwis.twojadomena.pl – kieruje na katalog domeny

2) RewriteCond %{HTTP_HOST} twojserwis.twojadomena.pl

Po wpisaniu do przeglądarki adresu:
www.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
twojserwis.twojadomena.pl – kieruje na katalog subdomeny
#twojserwis.twojadomena.pl – kieruje na katalog subdomeny
twojserwis#.twojadomena.pl – kieruje na katalog domeny
#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
#.#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
(nieskończoność #.)#.#.#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
www.#.#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny

3) A teraz przykład autorski nad którym siedziałem do rana, ponieważ żaden z dostępnych w internecie nie dawał mi tego co chciałem uzyskać.
RewriteCond %{HTTP_HOST} ^((.*)(\.))?twojserwis.twojadomena.pl

Po wpisaniu do przeglądarki adresu:
www.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
twojserwis.twojadomena.pl – kieruje na katalog subdomeny
#twojserwis.twojadomena.pl – kieruje na katalog domeny
twojserwis#.twojadomena.pl – kieruje na katalog domeny
#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
#.#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
(nieskończoność #.)#.#.#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny
www.#.#.twojserwis.twojadomena.pl – kieruje na katalog subdomeny

 

Udostępnij na:

16 thoughts on “[ .htaccess ] – Subdomeny za pomocą .htaccess (serwer Apache)

  1. Na pewno parametry by musiały być przesyłane postem, nie get. Trochę przysypiam, ale najlepiej według mnie odczytać z jakiej domeny wszedł user i wyświetlić mu daną stronę.

  2. No nie pomogłeś za bardzo, ale udało mi się to zrobić. Jakby ktoś potrzebował:

    RewriteCond %{HTTP_HOST} ^(www\.)?a\.pl$ [NC]
    RewriteRule ^(\/.*)?$ http://a.pl/index.php?content=1 [R=301,L]

    RewriteCond %{HTTP_HOST} ^(www\.)?b\.pl$ [NC]
    RewriteRule ^(\/.*)?$ http://b.pl/index.php?content=2 [R=301,L]

    Oczywiście przy założeniu, że a.pl i b.pl to dwie domeny przypisane do tego samego kontentu (katalogu).
    W ten piękny sposób udało mi się na home.pl postawić dwie strony (inny szablon i kategoria dla każdej z domen) na jednej joomli.

    1. Nie podałem odpowiedzi, ale nadałem kierunek :) Miło że wstawiłeś gotowca, na pewno komuś się przyda. Pozdrawiam

  3. Przepraszam, że odgrzebuję starego kotleta, ale mam dość poważny dla mnie problem i nie mogę sobie poradzić.
    Mianowicie przy próbie wejścia na subdomenę, wrzuca mi stronę główną. Miałem zmieniany plik htaccess.

    Zawartość pliku httpacces wygląda tak:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^strona [NC]
    RewriteRule ^(.*)$ strona%{REQUEST_URI} [R=301,L]

    RewriteCond %{REQUEST_URI} ^\/index.php/dj-na-wesele-warszawa-dj-siedlce$
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^(.*)$ strona [L,R=301]

    Bardzo proszę o pomoc :)

    1. Witam,

      Przede wszystkim włącz wildcard na serwerze, jestem pewien że masz wyłączony.

      Spróbuj metody z tego artykułu, sprawdzona i działa.

      Napisz dokładniej co chcesz uzyskać.

      Od jutra będę na urlopie więc nie wiem kiedy odpiszę.

      Pozdrawiam

  4. Witam, mam pytanie odnośnie automatycznego tworzenia subdomen. Przykładowo mam djgibo.pl/kontakt i chciał bym w dynamiczny sposób uzyskać przekierowanie na kontakt.djgibo.pl no i oczywiście zawartość tego pliku jako subdomena. Jest ktoś w stanie podpowiedzieć jak takie przekierowanie wykonać?

  5. Ja bym to zrobił w php. Chyba najszybciej bo z htaccess będzie zabawa. Po drugie tego typu strona nie będzie dobrze pozycjonować się w wyszukiwarce.

  6. aha i w tym samym .htacces z:
    RewriteRule . /index.php [L]
    na:
    RewriteRule . /blog/index.php [L]

    aha i zobacz czy path w live_site w pliku configuration.php jest ustawiony na podkatalog

  7. Witam,

    A ja mam ciekawy problem z nazwami subdomeny dla różnych wersji językowych.
    Chciałbym zmienić tylko nazwę subdomeny za pomocą ht. Czyli mamy pełny adres sklep.nazwadomeny.pl dla wersji polskiej. Ale dla wersji ang. mamy już shop.nazwadomeny.pl co nie powinno mieć miejsca.

    W związku z tym potrzebuję dokonać translacji shop.nazwadomeny.pl na sklep.nazwadomeny.pl. Za pomoc z góry dziękuję.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *