Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak W PEŁNI pozbyć się znaczka ~ z adresu strony?, Strona: domena.pl/~user/ jako katalog domena.pl/user/ , ale...
mxm
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


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/"(IMG:style_emoticons/default/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.

Ten post edytował mxm 15.10.2009, 17:47:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mxm
post
Post #2





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)


Mam nadzieje, że przyda się to komuś (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 18:39