Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [.htaccess] Przyjazne linki problem
Forum PHP.pl > Forum > Przedszkole
Fifi209
Piszę dla siebie stronkę internetową, postanowiłem zastosować "przyjazne linki".

Linki jakie chcę otrzymać to przykładowo http://host/akcja/ (np. http://localhost/komentarze/ )

Więc według tego napisałem coś takiego (.htaccess) :
Kod
RewriteEngine On

RewriteRule ^forum/$ forum/index.php
RewriteRule ^([A-Za-z0-9]+)/$ index.php?action=$1


I tutaj póki co wszystko dobrze działa, przekierowania są dobrze wykonywane.

Ale na stronie dodałem linki typu:

dodaj/
forum/
komentarze/

Jeżeli raz kliknę - wszystko jest ok, i adres przybiera odpowiednią wartość np. http://localhost/dodaj/

Gdy teraz (po zmianie adresu) kliknę np. na inny link dostanę coś takiego: http://localhost/dodaj/forum/ (co mnie w ogóle nie zadowala haha.gif)

Wymyśliłem aby linki zrobić jako bezwzględne - nie podoba mi się to rozwiązanie i tutaj pytanie czy da się inaczej.

A linki bezwzględne wymyśliłem tak:
Mam jakby szablon i mam linki w postaci:
  1. <a href="#dodaj">tekst</a>


Skrypt podmienia na odpowiednią wartość czyli np.:
  1. <a href="http://localhost/dodaj/">tekst</a>


Teraz pojawił się problem, o ile ze statycznymi plikami wszystko jest ok, tak z dynamicznie generowanymi (np. newsy) nie mam pojęcia jak to pogodzić. haha.gif
drake88
Jeśli dobrze zrozumiałem, to masz rozwiązanie.

Kod
    Options

    +FollowSymLinks

    RewriteEngine on

    RewriteBase /

    RewriteRule (.*)-(.*).html*$ /index.php?menu=$1&id=$2


Zapisz to jako .htaccess
Fifi209
Cytat(vonEverest @ 13.07.2009, 15:50:53 ) *
Jeśli dobrze zrozumiałem, to masz rozwiązanie.

Kod
    Options

    +FollowSymLinks

    RewriteEngine on

    RewriteBase /

    RewriteRule (.*)-(.*).html*$ /index.php?menu=$1&id=$2


Zapisz to jako .htaccess


Kurde patrz mam linki na stronie w postaci:
akcja/
cos/
blee/
asdf/
asdfsdf/

Jak mam adres http://localhost/
i kliknę w link przechodzę np. http://localhost/akcja/
i teraz jak kliknę w inny/ten sam link to otrzymam adres typu: http://localhost/akcja/cos/ zamiast http://localhost/cos/
drake88
Proste - nie podkładaj linków typu <a href="/cos" (...) tylko <a href="localhost/cos/" (...)
Puzi
Witam,
Np. Jeśli jesteś na stronie głównej to linki trzymaj w postaci takiej:
dodaj/
forum/
komentarze/
a jeśli jesteś np. na stronie dodaj to daj sobie takie linki:
../dodaj/
../forum/
../komentarze/

I powinno zadziałać.

Pozdrawiam
Fifi209
Cytat(vonEverest @ 13.07.2009, 15:57:32 ) *
Proste - nie podkładaj linków typu <a href="/cos" (...) tylko <a href="localhost/cos/" (...)



Cytat(Puzi @ 13.07.2009, 15:58:40 ) *
Witam,
Np. Jeśli jesteś na stronie głównej to linki trzymaj w postaci takiej:
dodaj/
forum/
komentarze/
a jeśli jesteś np. na stronie dodaj to daj sobie takie linki:
../dodaj/
../forum/
../komentarze/

I powinno zadziałać.

Pozdrawiam


Toteż napisałem sobie skrypt, który tworzy linki bezwzględne. Najlepiej pokażę o co mi chodzi:

  1. <?php
  2. $host = 'http://'.$_SERVER['HTTP_HOST'].'/';
  3.    
  4.    $header = file_get_contents('sources/html/header.html');
  5.    $news = file_get_contents('sources/html/news.html');
  6.    $footer = file_get_contents('sources/html/footer.html');
  7.    $site = $header.$news.$footer;
  8.    
  9.    echo preg_replace('/href="#([a-zA-Z0-9/]+)"/', 'href="'.$host.'$1/"', $site);
  10. ?>


I działa bez problemu, a teraz $news ma być generowany dynamicznie i po prostu zgłupiałem. haha.gif
Bawiłem się z ob_start(), ob_get_content(), ob_get_clean(), ob_end_flush() i mi jakoś nie wyszło. ;<
_olo_1984
może pomoże Ci metoda, którą ja stosuje. Generalnie do tworzenia linków mam funkcję np.
get_link((string)$module, (string)$action, (int)$param); przykład:
get_link('forum',NULL,NULL);
funkcja to zwykła podmiana danych działająca na zasadzie:
  1. <?php
  2. get_link((string)$module, (string)$action, (int)$param)
  3. {
  4. if(...) // jakaś walidacja, sprawdzanie warunków itp ...
  5. ...
  6. $str = 'http://'.$_SERVER['HTTP_HOST'].'/'.$module; // powiedzmy że tylko zmienna $module przyjeła jakaś wartość
  7. return $str
  8. }
  9. ?>

a w htaccess
Kod
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)$ index.php?module=$1&action=$2&arg=$3 [L]
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)$ index.php?module=$1&action=$2 [L]
RewriteRule ^([a-zA-Z]+)$ index.php?module=$1 [L]


generalnie próbowałem wzorować się na symfony, jak na moje potrzeby to się sprawdza, może Tobie się przyda, pozdr
Fifi209
Cytat(_olo_1984 @ 13.07.2009, 16:11:12 ) *
może pomoże Ci metoda, którą ja stosuje. Generalnie do tworzenia linków mam funkcję np.
get_link((string)$module, (string)$action, (int)$param); przykład:
get_link('forum',NULL,NULL);
funkcja to zwykła podmiana danych działająca na zasadzie:
  1. <?php
  2. get_link((string)$module, (string)$action, (int)$param)
  3. {
  4. if(...) // jakaś walidacja, sprawdzanie warunków itp ...
  5. ...
  6. $str = 'http://'.$_SERVER['HTTP_HOST'].'/'.$module; // powiedzmy że tylko zmienna $module przyjeła jakaś wartość
  7. return $str
  8. }
  9. ?>

a w htaccess
Kod
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)$ index.php?module=$1&action=$2&arg=$3 [L]
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)$ index.php?module=$1&action=$2 [L]
RewriteRule ^([a-zA-Z]+)$ index.php?module=$1 [L]


generalnie próbowałem wzorować się na symfony, jak na moje potrzeby to się sprawdza, może Tobie się przyda, pozdr


Jakbyś nie zauważył to napisałem coś równie prostego, i od razu cały szablon jadę. ;p

Chyba będę musiał jednak coś sam wymyślić, a bardzo chcę się ustrzec ajax'a bo stronę planuję na większą skalę a jak wiadomo ajax ma być dodatkiem a nie podstawą strony. tongue.gif (a zawsze ktoś js może mieć wyłączone)
_olo_1984
Cytat(fifi209 @ 13.07.2009, 17:17:06 ) *
Jakbyś nie zauważył to napisałem coś równie prostego, i od razu cały szablon jadę. ;p

Jakbyś nie zauważył to napisałem to wcześniej niż Ty. Pozdr
Fifi209
Cytat(_olo_1984 @ 13.07.2009, 16:23:47 ) *
Jakbyś nie zauważył to napisałem to wcześniej niż Ty. Pozdr


Fakt ale mój post jest pierwszy. winksmiley.jpg Hmm...
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.