Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] problem z katalogami przy przyjaznych linkach
Forum PHP.pl > Forum > PHP
adam_pm
Witam.

Postanowiłem zapytać na forum, gdyż w internecie nie potrafiłem znaleźć odpowiedzi na mój problem. Jestem w sumie samoukiem jeśli chodzi o php, tak więc nie znam większości pojęć i ciężko mi cokolwiek znależć. Prosiłbym o napisanie np. o czym mógłbym szukać, aby rozwiązać problem.

Znalazłem jedynie http://forum.php.pl/index.php?showtopic=77618&hl=slash ale nie dało to odpowiedzi na mój problem


A co do samego problemu, to chodzi mi o to, że gdy użyję mod rewrite do przepisania adresu 11,jakis-adres.html >> index.php?adres=11,jakis-adres to jest wszystko ok, ale ja chciałbym dodać do strony możliwość wyboru języka, po czym adres miałby wyglądać np. en/11,jakis-adres.html i przepisywać na index.php?adres=11,jakis-adres&lang=en. Wszystko jest w porządku, przepisuje świetnie, ale w przypadku użycia języka wszystkie odwołania do katalogów szaleją i chcą brać pliki w tym przypadku z folderu en. Mógłbym sprawdzać, czy jest wybrany język i wtedy dodawać do odwołań ../ ale to chyba nie za dobre rozwiązanie, a do tego mało wygodne. Chciałbym także umieć tworzyć adresy typu en/gallery/5-cat.html z pominięciem mojego problemu.

W podanym przeze mnie linku jest rozwiązanie tego poprzez użycie <base href... ale ja chciałbym, aby było to uniwersalne i działało niezależnie od miejsca, na którym się znajduje.

Czy jest na to jakiś sposób? W ostateczności poradzę sobię sprawdzając ile jest takich niby katalogów i dodam tyle ../ ale wolałbym wykonać to jednak w sposób cywilizowany, a sądzę, że są tu ludzie o wiele bardziej zaznajomieni z tematem niż ja i będą w stanie mi pomóc. Wystarczy mi, jeśli podpowiecie, w jakich okolicach miałbym szukać, albo dacie nazwę polecenia, to już postaram się poradzić sam.


Pozdrawiam serdecznie
Lars
Nie ma...Tylko linki bezwzględne lub <base href="">.

Pozdrawiam
Kamson
Nie wiem dokładnie czy o to chodzi... najprościej jest wszystkie zapytania kierować do jednego pliku np index.php a potem w nim analizować _SERVER["REQUEST_URI"]

do tego musisz wykorzystać .htaccess
Kod
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>


i teraz wywołując adres www.twojastrona.pl/en/gallery/5-cat.html tak naprawdę wywołany zostanie ndex.php.
Następnie:
  1. <?php
  2. $bloki = explode('/',$_SERVER["REQUEST_URI"]);
  3.  
  4. $jezyk = $bloki[0]; // en
  5. $akcja = $bloki[1]; // gallery
  6. $parametr = $bloki[2]; // 5-cat.html
  7. ?>


dodatkowo odpowiednimi funkcjami można usunąć .html z końca _SERVER["REQUEST_URI"] itd itd... to tylko zamysł działania.

.htaccess przekierowuje do index.php tylko żądania do plików/katalogów nie istniejących na serwerze dzięki czemu nie zakłóca odwołań do statycznych plików witryny np style czy zdjęcia.
adam_pm
Dzięki za odpowiedzi smile.gif

Kamson >> Skorzystałem z Twoich podpowiedzi, przy czym zamieniłem ostatnią linijkę z htaccess na RewriteRule ^(.*) index.php [L] (przy RewriteRule . /index.php [L] wyświetla "No input file specified.") ale wciąż to samo. Po wpisaniu adresu samej strony jest ok, style i obrazki się ładują, natomiast wpisując en/gallery/5-cat.html obrazki itd. są (chcą być:P) wczytywane z en/gallery/, czyli z tego miejsca, które podajemy przeglądarce, a nie tego, które przekazuje htaccess.

Zmienne odczytują się w obu przypadkach prawidłowo, ale właśnie to wczytywanie plików jest dla mnie priorytetem.

Chciałbym aby wyglądało to mniej więcej tak:

Katalog strony np. strona_internetowa
Katalog styli, grafiki itd - pliki

Wszelkie grafiki i style miałyby ścieżkę pliki/jakiś_plik.* i będąc na głównym katalogu (np. strona_internetowa/oferta.html) wczytywałyby się z "strona_internetowa/pliki" i z tego samego także miejsca wczytywałyby się mając adres np. strona_internetowa/en/oferta.html, a nie tak jak teraz z strona_internetowa/en/pliki/

Dodatkowo, linki na stronie głównej miałyby ścieżkę np. kontakt.html, a w drugim przypadku - en/kontakt.html aby zachować za każdym razem zmienną języka.

Jest tu jednak mały problem, bo nawet jeśli uzyskałbym sytuację, w której te pliki wczytywałyby się z dobrego miejsca to linki zapewne też kierowałyby w to podstawowe miejsce. Rozwiązałem to w ten sposób:

.htaccess
Kod
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
DirectoryIndex index.php
RewriteEngine on
RewriteRule ^(.+)/(.+).html$ index.php?lang=$1&atr=$2 [L]
RewriteRule ^(.+).html$ index.php?atr=$1


A kod php:
Kod
if($_GET[lang]) {$base_url="../";}


Do każdego odwołania do zewnętrznego pliku wpisuję dopisuję wtedy $base_url i wszystko śmiga. Przy dowolnej ilości atrybutów ze slashem na końcu możnaby napisać skrypt zliczający je i wpisujący daną ilość "../" do $base_url.

Teoretycznie wszystko działa w porządku, ale czy jest wykonane poprawnie? Może jakieś inne pomysły ?smile.gif

Pozdrawiam serdecznie
Kamson
Jeśli serwis znajduje się w głównej ścieżce domeny np www.twojastrona.pl i dalej podstrony wywołujesz www.twojastrona.pl/en/gallery/5-cat.html to w html'u ścieżki do plików podajesz bezwzględne

np. <img src="/zdjecia/zdjecie1.jpg" /> wtedy mimo wywołania strony www.twojastrona.pl/en/gallery/5-cat.html zdjęcie zostanie pobrane z www.twojastrona.pl/zdjecia/zdjecie1.jpg

jeśli natomiast serwis znajduje się gdzieś głębiej np. www.twojastrona.pl/serwisy/twojserwis/ i podstrone wywołujesz www.twojastrona.pl/serwisy/twojserwis/en/gallery/5-cat.html to w html'u podając ścieżkę bezwzględną musisz uwzględnić zagłębienie do serwisu <img src="/serwisy/twojserwis/zdjecia/zdjecie1.jpg" />.

Można do zrobić w miarę dynamicznie generując np. stałą define('SCIEZKA_SERWISU','/serwisy/twojserwis'); i w html o ile przelatuje przez parser php wstawić zdjęcie <img src="<?=SCIEZKA_SERWISU?>/zdjecia/zdjecie1.jpg" />
Pilsener
Zrób tak jak radzi Kamson plus ja bym Ci radził używanie tylko jednej zmiennej $_GET - tak jest prościej. Odbierasz tą zmienną gdzieś na początku skryptu i parsujesz, dzielisz explodem wg upodobania - łatwiej zmienić klasę/funkcję do tworzenia/odczytywania adresów niż bawić się w kilkaset reguł w .htacces winksmiley.jpg Jak sobie to zorganizujesz to Twoja sprawa - np. / - kategorie, myślnik - słowa kluczowe, średnik - zmienne, przecinek - parametry itp. itd. etc.

Następnie wystarczy użyć podobnej funkcji/klasy do wygenerowania bieżącej lokalizacji, którą wstawiasz do <base />
http://algorytmy.pl/doc/xhtml/?id=1008 - tu masz przykład. Wygodniej jest pisać np. artykuł i dawać src="obrazki/żółw.jpg" niż parsować ścieżki wszystkich elementów - lepiej chyba tylko podmieniać adres w <base>? Spróbuj, szybko przekonasz się o zaletach używania <base>.
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.