Skocz do zawartości
Zaloguj się, aby obserwować  
kori

jeden folder dla mniej istotnych stron

Polecane posty

cel: skrócenie listy domen, tylko do tych najważniejszych

 

założenia:
- dodajemy dowolną domenę, nawet nieistniejącą, np. innedomeny.pl
- dodajemy mniej ważne strony jako wskaźnik domen
- zawartość znajdowałyby się w folderze innedomeny.pl

przykład struktury:
innedomeny.pl/linki.pl

innedomeny.pl/subdomeny.pl

innedomeny.pl/ciekawostki.pl
innedomeny.pl/moje.linki.pl

i tu zakładam przyjdzie z pomocą .htaccess, który powie

domena linki.pl znajduje się w podfolderze "linki.pl"

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

I - tak zakładam - pytasz o zawartość .htaccess?...

 

Jeśli chcesz każdą domenę dodawać selektywnie:

RewriteCond %{HTTP_HOST} ^(www\.)?linki\.pl$
RewriteCond %{REQUEST_URI} !^/linki\.pl/
RewriteRule ^(.*)$ /linki.pl/$1

Można pokusić się o coś bardziej automatycznego, w znaczeniu, że tworzysz .htaccess tylko raz, a potem już do niego nie zaglądasz, a jedynie dodajesz/usuwasz foldery (choć tu nie jestem pewien prawidłowości drugiej linijki):

RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{REQUEST_URI} !^/%2/
RewriteRule ^(.*)$ /%2/$1

Stosowałem w przeszłości coś takiego właśnie na darmowym hostingu, gdzie dodatkowe domeny można było jedynie parkować na głównej, a nie dodawać jako osobne. Poza tym w podobny sposób sprawdzać też można, czy zawartość osiągana jest z adresu domena.pl/subdomena czy też subdomena.domena.pl (w przypadku np. DirectAdmin subdomeny domyślnie są w folderach głównej domeny, a więc zawartość dostępna jest pod takimi dwoma adresami, a możemy nie chcieć mieć zdublowanych adresów).

Edytowano przez Piotr GRD (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Kamikadze

Jeżeli to jakiś VPS to bym skierował default-000 na jakiś katalog i każda podpięta domena bez VHosta byłaby kierowana z automatu na ten katalog. Mniej roboty ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@Piotr GRD

Z tego wlasnie powodu, że domeny tworzą się w folderze głównej nie robię tak subdomen.

Subdomeny dodaje osobno jako domeny, ponieważ nie dotyczą one tego co strona główna,

a archiwizowanie właściwej głównej domeny podówczas sprawiałoby mi kłopot ilości danych.

 

po dodaniu wpisów .htaccess
i domenie: domena.pl/s.costam.pl

pokazało:

Internal Server Error

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

Please contact the server administrator, webmaster@domena.pl 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.

@Kamikadze nie to normalny hosting directadmin, ale mętlik mi się robi w domenach i chcę porobić porządki
chę by na tej głównej liście domen było ok. 5 domen

Edytowano przez kori (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Błąd 500 oznacza bardzo często jakiś błąd lub niedozwoloną regułę w .htaccess. Upewnij się, że nie ma jakiejś literówki, niewidocznego tabulatora itd. itp.

Sprawdziłem wersję pierwszą na hostingu opartym o DirectAdmin i dla mnie działa.

 

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?linki\.pl$
RewriteCond %{REQUEST_URI} !^/linki\.pl/
RewriteRule ^(.*)$ /linki.pl/$1

 

Wersja druga faktycznie powoduje błąd 500, najwyraźniej coś pomyliłem, może później*** się tym pobawię.

 

 

*** "Później" może oznaczać u mnie godziny, dni, tygodnie, a nawet miesiące i lata (prokrastynacja).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No ja wlasnie tę drugą, bo fakt automatem byłoby lepiej :P
zaraz oblukam pierwszą

akurat miałem zaparkowaną http://s.domena.pl

po wpisaniu adresu pokazał się index głównej domeny, nie tej dopiętej

 

dobra już trybi:

RewriteCond %{HTTP_HOST} ^(www\.)?dupa.vot\.pl$
RewriteCond %{REQUEST_URI} !^/dupa.vot\.pl/
RewriteRule ^(.*)$ /dupa.vot.pl/$1

na razie wystarczy, aczkolwiek automat byłby bardzo mile widziany ;)

Edytowano przez kori (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Faktycznie pomyliłem się w drugiej linijce drugiego przykładu. "CondPattern***" nie może zawierać "backreference***" ani żadnych zmiennych. Można sobie z tym poradzić wykorzystując ap_expr, ale jest to dostępne dopiero w Apache w wersji 2.4. Ja nie mam dostępu do takowego, żeby móc przetestować i się nauczyć jak to powinno wyglądać (a wystarczy, że jakiś jeden znak nie tak umieszczę i znów odezwiesz się, że masz "500"). Jeśli u Ciebie jest Apache 2.4, to spróbować możesz czegoś na kształt:

RewriteCond expr "! %{REQUEST_URI} -strmatch '/%{HTTP_HOST}/*'"

Ale nigdy tego nie używałem, nie mam jak przetestować, więc nie jestem pewien prawidłowości. (Poza tym w ten sposób inaczej trzeba by potraktować ewentualną cząstkę "www.", a dokładniej to chyba pozbyć się jej w każdym zapytaniu)

 

Jeśli nie masz wersji 2.4, a wcześniejszą, to możesz trochę sobie "ręczny" kod uprościć. Ściśle rzecz ujmując to nie tak powinno wyglądać, ale dla Twoich zastosowań będzie jak najbardziej działać, a mniej będziesz miał do każdorazowego uzupełniania:

RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{REQUEST_URI} !^/(linki\.pl|subdomeny\.pl|ciekawostki\.pl|moje\.linki\.pl|dupa\.vot\.pl)/
RewriteRule ^(.*)$ /%2/$1

Może ktoś inny ma lepszy pomysł?... Trochę na temat korzystania z mod_rewrite wiem, ale nie wszystko, więc możliwe, że coś przegapiłem.

 

 

*** Przepraszam za angielskie nazewnictwo, ale zawsze czytam dokumentację po angielsku i często najzwyczajniej w świecie nie znam polskich odpowiedników.

Edytowano przez Piotr GRD (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

jedno mnie zastanawia, czemu przed każdą kropką stawiasz slash,

 

ja z tej pierwszej wersji poczyściłem slashe i też działa

RewriteCond %{HTTP_HOST} ^(www\.)?dupa.vot.pl$
RewriteCond %{REQUEST_URI} !^/dupa.vot.pl/
RewriteRule ^(.*)$ /dupa.vot.pl/$1


druga wersja faktycznie łatwiej do edycji
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{REQUEST_URI} !^/(dupa.vot.pl|costam.pl)/
RewriteRule ^(.*)$ /%2/$1

Edytowano przez kori (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dla ścisłości.

 

W wyrażeniach regularnych . (kropka) oznacza dowolny znak. Zatem sprawdzając wyrażenie regularne "costam.pl" pasować do niego będą zarówno "costam.pl" jak i "costam4pl", "costam/pl", "costamWpl", "costam&pl" itd. Jeśli chcemy sprawdzić konkretnie obecność kropki, to w wyrażeniu regularnym trzeba poprzedzić ją odwrotnym ukośnikiem. Podobnie jak w PHP czy javascript odwrotnym ukośnikiem poprzedza się cudzysłowy wewnątrz cudzysłowów itp.

 

Wprawdzie w tym konkretnym przypadku w normalnych warunkach HTTP_HOST nigdy nie będzie miał wartości "costamXpl", więc nie ma to większego znaczenia, ale dla ścisłości i po to by wyrobić sobie właściwy nawyk również i tutaj poprzedzam kropkę odwrotnym ukośnikiem, aby kiedyś gdzieś w innym wyrażeniu regularnym, gdzie będzie to akurat istotne, o tym odwrotnym ukośniku nie zapomnieć.

 

 

 

edycja:

I nie "slash" (ukośnik) /

tylko "backslash" (odwrotny ukośnik) \

Poprawiam, bo może się zdarzyć, że się z kimś nie dogadasz i jakiś kod działać nie będzie. ; )

Edytowano przez Piotr GRD (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×