Skocz do zawartości

Subdomeny w .htaccess zamiast $_GET[] w php


Rekomendowane odpowiedzi

Witam

Szukałem i próbowałem znaleźć rozwiązanie, w innych tematach, ale nie udało mi się. Może istnieje, ale ja zbyt słabo znam się na kodowaniu, żeby dostrzec i zrozumieć, więc z góry przepraszam, jeśli powielam temat.

Problem dotyczy serwisu: www.ludziesportu.pl. Chciałbym, żeby użytkownicy mieli subdomeny w postaci login.ludziesportu.pl . Istnieje już quasi-rozwiązanie częściowe, które nie jest jednak zbytnio eleganckie, ale na takie było mnie stać. Za wyświetlanie podstron użytkowników odpowiada parametr pr z adresu, który potem jest potem przerabiany przez php, a jest po prostu identyfikatorem użytkownika. Ale oprócz tego każdy użytkownik ma swój login powiązany z identyfikatorem.

W tej chwili przekierowanie realizowane jest przez toporną funkcję header z takim wykorzystaniem:

function GetUserOfDomainLinks($domain) // funkcja odczytuje subdomenę, czyli jeżeli jest wpisane cokolwiek.ludziesportu.pl, to zwraca cokolwiek

function SetUserOfDomain($name_user) // funkcja sprawdza, czy istnieje użytkownik o nazwie takiej jak subdomena, a jeśli tak, to zwraca id użytkownika, lub NULL

$domain_username = GetUserOfDomainLinks($_SERVER['HTTP_HOST']);

if ($domain_username!='')

{

$domain_user_id = SetUserOfDomain($domain_username);

if ($domain_user_id > 0)

{

header("Location: https://www.ludziesportu.pl/index.php?pr=".$domain_user_id);

}

// następnie jeśli użytkownik istnieje, to podmienia adres na wyróżniony ciąg

Praktycznie to widać na przykładzie: bartosz_zajaczkowski.ludziesportu.pl

Tak zrobił wykonawca, a problemem jest, że średnio znam się na php (uczę się na żywym organiźmie) oraz nie stać mnie na zlecenie poprawienie kodu. A dowiedziałem się teraz, że mogłoby to wyglądac dużo lepiej. Gdybym teraz ja miał to napisać, to poradziłbym sobie w samym php.

Niestety w kodzie jest ok. sto różnych plików php odpowiadających za edycję i wyświetlanie profilu. Prawie każdy z nich korzysta z parametru pr, który pobiera funkcją $_GET['pr']. Tak więc poprawienie serwisu wymagałoby podmienie tej części, co byłoby w tej chwili żmudne.

Pytanie brzmi, czy nie da sprawy rozwiązać się prościej przez .htaccess z wykorzystanie mod rewrite.

Ale byłaby potrzeba, żeby w tej funkcji była pobierana subdomena i ewentualne id, oraz podmieniane

https://login_usera.ludziesportu.pl/?zmienna2=XXX&zmienna3=YYY&itd na https://www.ludziesportu.pl/index.php?pr=id_usera&zmienna2=XXX&zmienna3=YYY&itd

Czy da się to w prosty sposób zrobić, tak żeby nie musieć przepisywać całego serwisu, oraz czy ma szanse to działać, z uwzględnieniem tego, że silnik używa fukcji $_GET['pr'].

Będę wdzięczny za każdą wskazówkę.

Pozdrawiam, Bartek

I jeszcze drugie mniejsze pytanko. Dopiszę także tutaj, żeby nie powielać wątków. Podejrzewam, że rozwiązanie jest banalne.

Mam problem z mod rewrite w poddomenie tego samego serwera. Serwer jest w NetArcie (nazwa.pl) i normalnie obsługuję tą funkcję. Natomiast nie chce to działać w poddomenie przekierowanej na podkatalog. Wygląda to tak:

Postanowiłem sobie założyć katalog qlweb, w którym chciałbym skorzystać z funkcji mod rewrite, a skrypt qlweb ma taką możliwość. I częściowo działa, ale postanowiłem troszkę utrudnić sprawę.

Katalog qlweb jest dostępny pod adresem: www.ludziesportu.pl/_subdomeny/katalog (czyli "./_subdomeny/katalog")

Jeśli wejdzie się w ten sposób, to mod rewrite działa. Ja jednak postanowiłem utworzyć oddzielną poddomenę (w panelu NetArta) dla tego katalogu: https://katalog.ludziesportu.pl

Ale jak się wejdzie poprzez poddomenę, to mod rewrite już nie działa (wystarczy kliknąć w obu przypadkach w dowolną kategorię, żeby zobaczyć różnicę). Czy można coś na to poradzić?

Oczywiście można zrezygnować z opcji mod rewrite, lub zrezygnować z poddomeny i pogodzić się z tym, że katalog będzie np. pod adresem www.ludziesportu.pl/katalog (aktualnie taki odnośnik nie istnieje). Ale akurat

Google już mi zaindeksowało poddomenę, więc fajnie byłoby z niej korzystać i zarazem, żeby odnośniki były "przyjazne".

Nie wiem, czy problem wynika z charakteru funkcji "mod rewrite" czy z właściwości serwera. Próbowałem poradzić sobie tak:

RewriteRule ^kategoria-([^-]+).html$ https://www.ludziesportu.pl/_subdomeny/katalog/index.php?kat=$1 [L]

itd.

(dopisana część do oryginalnego pliku pogrubiona), ale widać tą

podmianę w pasku przeglądarki.

Można też zapewne w samym .htaccess w głównej domenie, ale jego wolałbym wykorzystać do robienia poddomen userów (opisane w pierwszym poście), a subdomenę na qlweb stworzyć z poziomu panelu administracyjnego serwera.

Hmmm... nie jestem informatykiem, od dwóch tygodni znam słowo php, a od przedwczoraj słowo "mod rewrite", ale próbuję sobie jakoś radzić z administracją serwerem :-)

Byłbym wdzięczny za wskazówkę, czy da się rozwiązać problem.

Pozdrawiam, Bartek

istnieje cos takiego jak edycja postu!

nie piszemy jednego pod drugim

gizmoo3

www.LudzieSportu.pl - Twój własny serwis sportowy.

Strony domowe sportowców oraz osób związanych ze sportem.

Odnośnik do komentarza
Udostępnij na innych stronach

hmm oba sa do zrobienia ale troche duzo opisywania

[ I ]

W htaccess robimy zeby zawsze gdy ktos wpisze jakakolwiek subdomene ladowalo mu plik pokaz_usera.php?adres=(tutaj nazwa subdomeny lub caly adres ktory potem sie okroi do subdomeny)

potem na poczatku pliku pokaz_usera.php sprawdzasz sobie ta subdomene czy jest i sprawdzasz id nastepnie

$_GET[id] = $odczytane_id; (nawet nie wiem czy tak sie da przypisac)

i potem dalej powinno juz uzywac odpowiedniego numeru id.

[ II ]

Mialem kiedys to samo chyba ale za bardzo nie pamietam teraz posprawdzaj takie warianty bo napewno odwoluje sie nei do tego katalogu co trzeba (ja sobie chyba sprawdzalem w logach jaki plik chce otwierac)

RewriteRule ^kategoria-([^-]+).html$ _subdomeny/katalog/index.php?kat=$1 [L]
RewriteRule ^kategoria-([^-]+).html$ index.php?kat=$1 [L]

Pozdrawiam, breja

wl4u3.gif

Odnośnik do komentarza
Udostępnij na innych stronach

Witam

Dzięki za pomoc. Z [ I ] to będę musiał się jeszcze pobawić. Natomiast w [ II ] pomógł mail do działu technicznego NetArta. Okazało się, że wystarczy dopisać w pliku .htaccess linijkę:

RewriteBase /

Nie wiem, co ona oznacza, ale działa :-)

Pozdrawiam, Bartek

www.LudzieSportu.pl - Twój własny serwis sportowy.

Strony domowe sportowców oraz osób związanych ze sportem.

Odnośnik do komentarza
Udostępnij na innych stronach

Chciałbym, żeby użytkownicy mieli subdomeny w postaci login.ludziesportu.pl
Do tego celu wystarczy ustawić opcję wildcardu dla domeny i odczytywać parametry z adresu URL

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Hmmm....

Nie wiem do końca co to jest wildcard, ale z tego co wyczytałem, to serwery wirtualne nie mają takiej opcji - ja mam serwer Active w NetArcie (nazwa.pl).

Próbowałem zrobić to takim .htaccessem, ale nie działa do końca:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^ludziesportu.pl$
RewriteRule (.*)		 [url=https://www.ludziesportu.pl/$1]https://www.ludziesportu.pl/$1[/url]  [L,R=301]

RewriteCond %{HTTP_HOST}  !(^www.ludziesportu.pl)
RewriteCond %{HTTP_HOST}  !(^ludziesportu.pl)
RewriteCond %{HTTP_HOST}  ^([^\.]+).ludziesportu.pl$

RewriteRule ^$ /index2.php?user=%1 [L,R=301]
RewriteRule ^kat-([^-]+)podkat-([^-]+).html$ https://www.ludziesportu.pl/index2.php?user=%1&kat=$1&podkat=$2  [L,R=301]
RewriteRule ^kat-([^-]+).html$ https://www.ludziesportu.pl/index2.php?user=%1&kat=$1 [L,R=301]

Pierwszy akapit standard. Drugi akapit to automatyczne dodanie www w przypadku gdy nie ma.

Akapit trzeci z czwartym ma w założeniu robić przekierowanie, ale działa tylko częściowo. Próbowałem zarówno z wpisaniem całej ścieżki, która jest pochylona, jak i bez.

Jak wpiszę do przeglądarki:

bartek.ludziesportu.pl
to wypluje, to co powinien, czyli:
www.ludziesportu.pl/index2.php?user=bartek

Problem pojawia się, gdy chcę się odwołać do podstrony i jak wpiszę np.:

bartek.ludziesportu.pl/kat-14podkat-17.html
to nie przepisuje pierwszego członu poddomeny do zmiennej user (brakuje poddomeny po user= ) i wypluwa tylko:
www.ludziesportu.pl/index2.php?user=&kat=14&podkat=17

Czyli w chwili obecnej potrafię wywołać tylko czyściutką poddomenę i przepisać pierwszy człon do zmiennej. Ale nie potrafię wywołać podstrony w poddomenie, a co próbowałem zrobić w powyższy sposób.

Wychodzi na to, że kłóci się %1 z $1 ale to już za duże czary dla mnie, żeby zrozumieć dlaczego. Pytanie, co jest w powyższej formule skopane i jak zrobić to poprawnie (nie musi być w ten sposób, każdy, który zadziała będzie dobry)?

Pozdrawiam, Bartek

www.LudzieSportu.pl - Twój własny serwis sportowy.

Strony domowe sportowców oraz osób związanych ze sportem.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności