Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] problem z katalogami przy przyjaznych linkach
adam_pm
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 19.10.2008

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


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
Go to the top of the page
+Quote Post
Lars
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


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

Pozdrawiam
Go to the top of the page
+Quote Post
Kamson
post
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 23.10.2006
Skąd: Warszawa

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


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.

Ten post edytował Kamson 19.10.2008, 14:38:03
Go to the top of the page
+Quote Post
adam_pm
post
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 19.10.2008

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


Dzięki za odpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/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 ?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam serdecznie
Go to the top of the page
+Quote Post
Kamson
post
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 23.10.2006
Skąd: Warszawa

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


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" />
Go to the top of the page
+Quote Post
Pilsener
post
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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>.
Go to the top of the page
+Quote Post

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: 26.12.2025 - 08:24