Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak W PEŁNI pozbyć się znaczka ~ z adresu strony?
Forum PHP.pl > Forum > Serwery WWW > Apache
mxm
Witam!!

Mam małe problemy aby pozbyć się znaczka ~ z adresu strony.

GŁÓWNY PROBLEM:
Chodzi o to aby nawet, jeśli wejdę na stronę "domena.pl/~user/" to żeby w pasku przeglądarki wczytywała się strona o adresie "domena.pl/user/" (takie niby przekierowanie).

CZĘŚCIOWE ROZWIĄZANIE:
Problem częściowo rozwiązałem za pomocą google i mod_rewrite po zmianie pliku ".htaccess":
Kod
RewriteEngine On
RewriteRule ^user$ /~user/
RewriteRule ^user/$ /~user/
RewriteRule ^user/index\.php$ /~user/index\.php
Plik ".htaccess" jest umieszczony w katalogu głównym strony na "domena.pl/".

Teraz niestety, ale jesli robie przekierowanie ze strony ze znaczkiem "~" na stronę jako katalog bez znaczka, poprzez umieszczenie pliku ".htaccess" (oczywiście tu są inne instrukcje) w "domena.pl/~user/", to strony się zapętlają, bo przecież plik ".htaccess" w "domena.pl/" odwołuje się do realnych danych w "domena.pl/~user/".

Tak więc stosowanie plików ".htaccess" w obu lokalizacjach jest bezcelowe.

PYTANIE:
W takim razie skąd wiadomo, że akurat internauta wpisuje w przeglądarce adres "domena.pl/~user/", a nie "domena.pl/user/"questionmark.gif Gdybym to wiedział to mógłbym nawet zrobić taką regułkę w samym PHP, ale takiej możliwości nie znalazłem w zmiennej globalnej $_SERVER :/

Serwer jest na freebsd, apache 2.0. Mam dostęp do wszystkich plików konfiguracyjnych. Problem oczywiście dotyczy tylko przekierowania tego jednego wybranego usera.

P.S. Chciałem to zrobić na Virtual Hoscie w samym apache'u, ale opisywana tu jako "domena.pl" to w rzeczywistości adres "subdomena.glowna_domena.pl" i próby w stylu "dowolna_nazwa.subdomena.glowna_domena.pl" już nie działa. Na mojej domenie na lokalnym serwerze pod windą takie rzeczy spokojnie mogę robić. Widocznie Ci z "glowna_domena.pl" mają poblokowane podstrony.
jmail
hmmm. ciekawostka u mnie działa oO jak przepisałem, żeby user zamieniał na ~user :/ i bez względu na to czy odwołam się do /user czy do /~user działa oO

htaccess wsadziłem tylko do katalogu głównego



mxm
Działa tylko, że jeśli wchodzisz na "~user/" to w przeglądarce masz taki właśnie adres.

Poza tym sprawdzałem to na logowaniu się. Jeśli loguje się na stronie "user/", a potem przechodzę na stronę "~user/" to wtedy nie jestem zalogowany i muszę się ponownie logować. Jeśli się wyloguje z jednego z tych adresów to na drugim adresie wciąż jestem zalogowany! blink.gif

Tak więc chcę tego uniknąć.
jmail
a to co? session_destroy() Ci nie działa? biggrin.gif

usuń cookie i session i będzie git

poza tym tego nie unikniesz. musiałbyś katalog ~user przenieść na domena.pl/user wtedy na pewno tyldy nie będziesz miał
mxm
Z sesjami jest ok biggrin.gif Korzystam z MySQLa dla sesji (typ MEMORY) i wszystko działa tak jak powinno. Poza tym cookie nie używam winksmiley.jpg
Chciałem wyjaśnić dla ścisłości, że z obu tych adresów można się logować, ale są to dwie niezależne sesje tongue.gif

A co do przenosin do katalogu "domena.pl/user" nie ma mowy. Myślałem, że da się zrobić jakieś przekierowanie w Apache'u... Może ktoś ma jakiś pomysł?
jmail
no ale pomyśl biggrin.gif jeżeli apache widzi katalog ~user to jak ma Ci to maskować biggrin.gif co innego na IIS'e - tam byś walnął sobie wirtualny katalog i miał wszystko w trąbie
mxm
Heh, a co to apache nie ma katalogów wirtualnych?? Od kiedy?? Kwestia tylko jak tego się używa. TO JEST PROBLEM!!! Zresztą katalog wirtualny to nie wszystko, bo chcę przekierować cały ruch do głównego katalogu na głównej domenie. W dodatku chcę zrobić to tylko dla wybranego JEDNEGO użytkownika!


ROZWIĄZANIE PROBLEMU:

KROK 1 (opcjonalny):
Pogrzebałem sobie w tym temacie bardzo głęboko. Dowiedziałem się, że można bardzo łatwo zablokować wybranego usera z tyldą poprzez plik apacha "httpd.conf". Wyłączamy użytkownika wybranego z tyldą dopisując go do wyłączonych smile.gif
  1. <IfModule mod_userdir.c>
  2. # ...
  3. UserDir disabled user
  4. # ...
  5. </IfModule>
Oczywiście ten krok można pominąć, gdyż sam apache umożliwia zamaskowanie adresu z tyldą.

KROK 2:
Teraz czas na VirtualHost i jego niezwykłe możliwości.
Przykładowa konfiguracja w "httpd.conf":
  1. NameVirtualHost *:80
  2.  
  3. <VirtualHost _default_:80>
  4. ServerName domena.pl
  5. ServerAlias www.domena.pl
  6. DocumentRoot /home/glowny_user/public_html/
  7. RedirectMatch ^/~user(.*) /user$1
  8. RewriteEngine on
  9. RewriteCond /home/user/public_html$1 -f [OR]
  10. RewriteCond /home/user/public_html$1 -d
  11. RewriteRule ^/user(.*) /home/user/public_html$1
  12. # .... reszta waszych instrukcji ...
  13. </VirtualHost>
W ten sposób mamy dostęp do strony user poprzez wirtualny katalog domeny głównej bez tyldy: domena.pl/user. Oczywiście słowo user nie musi być użytkownikiem, który istnieje w systemie, więc możliwości są duże. Oczywiście hurtowo dla wszystkich userów można takie coś zrobić, ale w moim przypadku chciałem to wykonać tylko dla jednego wybranego smile.gif
Całą operację można wykonać tylko jeśli mamy dostęp do pliku konfiguracyjnego apacha.

Jak to działa??
A teraz opiszę naważniejsze regułki:
  • RedirectMatch ^/~user(.*) /user$1 - przekierowuje żądania z domena.pl/~user na domena.pl/user
  • Instrukcje mod_rewrite - po wywołaniu strony domena.pl/user przekierowuje żądania (plików i katalogów) do ich ścieżek dostępowych we FreeBSD (lub dowolnej dystrybucji linuxa). Można to też dostosować do ścieżek z windy winksmiley.jpg


Mam nadzieje, że przyda się to komuś winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.