Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [.htaccess] Przyjazne linki problem
Fifi209
post
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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ć. (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
drake88
post
Post #2





Grupa: Zarejestrowani
Postów: 283
Pomógł: 15
Dołączył: 22.03.2009
Skąd: Bytów

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


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





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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





Grupa: Zarejestrowani
Postów: 283
Pomógł: 15
Dołączył: 22.03.2009
Skąd: Bytów

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


Proste - nie podkładaj linków typu <a href="/cos" (...) tylko <a href="localhost/cos/" (...)
Go to the top of the page
+Quote Post
Puzi
post
Post #5





Grupa: Zarejestrowani
Postów: 231
Pomógł: 17
Dołączył: 26.08.2007

Ostrzeżenie: (10%)
X----


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





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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. (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
Bawiłem się z ob_start(), ob_get_content(), ob_get_clean(), ob_end_flush() i mi jakoś nie wyszło. ;<
Go to the top of the page
+Quote Post
_olo_1984
post
Post #7





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


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





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (a zawsze ktoś js może mieć wyłączone)
Go to the top of the page
+Quote Post
_olo_1984
post
Post #9





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


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





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Hmm...
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: 22.08.2025 - 11:47