Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Access]REQUEST_URI a htaccess - pytanie
Forum PHP.pl > Forum > Przedszkole
SirValeq
Hej,

Sprawa jest taka:
Mam stronę na jakimś tam CMS (dostałem, nie tworzyłem), i plik index.php, który wczytuje jakiś tam plik .tpl, w którym jest:
Kod
<title>{strip}
  {if $_SERVER["REQUEST_URI"] == '/' or $_SERVER["REQUEST_URI"] == '/pl'}XXXXXX
  {elseif $_SERVER["REQUEST_URI"] == '/Ofirmie/'}
  O firmie - XX
  {elseif $_SERVER["REQUEST_URI"] == '/Oferta/'}
  Oferta - XX (i dalej podobnie, potem </title> i to samo z resztą treści strony


Pod adresem "/" strona wyświetla wszystko, co powinna. Jednak ze wszystkimi "/costam/" sobie nie radzi. Wyskakuje z serwera komunikat, że plik/katalog "/costam/" nie istnieje.
Tak na mój początkujący rozum, problemem jest brak .htaccess i jakiejś reguły, która przekieruje wszystkie adresy inne niż "/" na "/" a php będzie wiedziało jaki był adres dzięki $_SERVER["REQUEST_URI"], które w .htaccess pewnie się jakoś ustawia.
Nie wiem tylko zupełnie, jak to osiągnąć. Ani nawet, czy dobrze myślę... Dlatego proszę o pomoc :-)
SirValeq
Trochę wyedytowałem pierwszy post. Nie chodzi o to, że nie działają adresy "/costam" a "/costam/" już tak, tylko ani jeden ani drugi.
trueblue
A tak?
Kod
{elseif $_SERVER["REQUEST_URI"]|lower == '/ofirmie/'}


Oczywiście dla adresu z kończącym slashem.
SirValeq
Też nic.

No i w ogóle śmieszna sprawa. Skopiowałem sobie tę stronę na zupełnie inny serwer (inny hosting) i tutaj objaw jest inny. Otóż tak samo dobrze wyświetla się strona główna, zaś wszystkie adresy inne, np. "http://domena.com/Ofirmie/" wyświetlają też tylko stronę główną. Dla przypomnienia, na tamtym serwerze takie adresy generują błąd i komunikat serwera o nieistnieniu takiego pliku. Na obu serwerach nie ma żadnego pliku .htaccess.
Dla mnie to magia w tym momencie :-D
trueblue
.htaccess może być ukryty.

Plik powinien zawierać coś takiego:
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

wtedy REQUEST_URI zostanie przerzucony do index.php bez traktowania go jako nieistniejących katalogów.
SirValeq
Umieściłem plik .htaccess z tą treścią w obu miejscach (w katalogu głównym, tam gdzie index.php) i... zupełnie nic się nie zmieniło :-(
trueblue
Jaki adres wywołujesz? Zmień domenę i pokaż pełny adres.
SirValeq
Strona jest pod adresami: http://minwood.com.pl/ oraz http://minwood.walewicz.com/
Dokładnie te same pliki i baza danych (podmienione tylko dane dostępowe do niej w pliku konfiguracyjnym CMSa). Aby zobaczyć, co się dzieje, wystarczy kliknąć w dowolną pozycję menu.
trueblue
W drugim wygląda na to, że jest .htaccess.
Czy zmieniłeś fragment w szablonie na:
Kod
{elseif $_SERVER["REQUEST_URI"]|lower == '/ofirmie/'}

?
SirValeq
Tak, w obydwu miejscach dla "Ofirmie". Plik .htaccess jest w obu miejscach, jeszcze sprawdzałem. Nie wiem, dlaczego działają inaczej.

Do czegoś doszedłem. Zauważyłem, że ten CMS w pliku index.php pobiera dwie zmienne przez $_GET: 'module' i 'mode'. Przejrzałem pliki źródłowe CMSa, żeby zobaczyć, co tam trzeba wpisać i np. URL http://minwood.walewicz.com/index.php?modu...mp;mode=subpage pokazuje tę treść, co trzeba (lecz nadal złe title i description).
Ale jednak linki w menu są w postaci "domena.com/Kontakt/", czyli coś gdzieś na tym poprzednim serwerze, gdzie ta strona była, musiało te zmienne jakoś generować, a url zostawiać w tej postaci z ukośnikami. Jak to mogło być zrobione?
trueblue
Zgubiłeś gdzieś oryginalny .htaccess.

Na podstawie tego co podałeś można wywnioskować jego fragment:
Kod
RewriteCond %{REQUEST_URI} ^/([a-z]+)/([a-z]+)/$ [NC]
RewriteRule ^(.*)$ index.php?module=%1&subpage=%2
RewriteCond %{REQUEST_URI} ^/([a-z]+)/$ [NC]
RewriteRule ^(.*)$ index.php?module=%1


Niemniej warunki w szablonie są bez sensu skoro i tak jest wykonane przepisywanie adresów (można warunkować zmiennymi z $_GET, a nie na podstawie $_REQUEST_URI).
SirValeq
Miałeś rację. Brakowało oryginalnego .htaccess, który musiał być ukryty i nie został skopiowany razem z resztą całej strony. Udało mi się go uzyskać.

Dzięki za poświęcony czas wink.gif
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.