Skocz do zawartości

mod_rewrite


Rekomendowane odpowiedzi

Witam...

Czy istnieje sposob aby do przepisywanego adresu dolaczyc ciagi znakow z bazy MySQL?

przyklad:

linki na danej stronie wygladaja w ten sposob:

index.php?id=1 itd

w bazie mam dla kazdego id odpowiedni opis np. dla id=1 - "strona glowna"

docelowo chcialbym uzyskac adres /1,strona_glowna lub /1,strona-glowna

jednak nie mam pomyslu jak wplesc opisy/tytuly stron do regul mod_rewrite...

Pozdrawiam...

Morrowind.pl - Polski serwis The Elder Scrolls V: Skyrim...

Posiadamy także informacje na temat Oblivion oraz Morrowind

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli obecnie skrypt pobiera ID z adresu i szuka go w bazie, to wystarczy przerobić skrypt tak, aby pobierał z adresu opis i wg. niego pobierał treść z bazy. Wtedy nawet ID nie potrzeba w adresie, tylko opisy muszą być unikalne.

Zamiast index.php?id=1 będzie index.php?opis=strona-glowna, a później regułka mod_rewrite => strona-glowna.html i masz piękne linki.

Ostatnio pisałem skrypt i właśnie w taki sposób rozwiązałem ten problem. Mam nadzieję, że sposób jest dobry.

Autor postu nie ponosi żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania zawartych w nim informacji.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem jak wygląda ten skrypt, więc nie wiem jaki sposób będzie w tym przypadku najlepszy.

Skoro mają być inne linki, to przecież i tak trzeba zmienić ich strukturę w skrypcie, na takie, jakie będą po zastosowaniu mod_rewrite. Czyli w tym przypadku co wcześniej podałem, byłyby takie: teksty-opisujace.html

teksty-opisujace.html kieruje na index.php?opis=teksty-opisujace.

Można pozostać przy pobieraniu przez ID. Tylko wtedy musisz zmodyfikować skrypt, żeby tworzył np. 1,strona_glowna. Zamiana tego na index.php?id=1 to już najmniejszy problem. Jak nie znasz mod_rewrite, to można łatwo przerobić jakiegoś gotowca.

Autor postu nie ponosi żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania zawartych w nim informacji.

Odnośnik do komentarza
Udostępnij na innych stronach

Rafale - nie tak... gdyż:

1. obawiam się, że nie uda się uzyskać unikalnego opisy w bazach - takim idealnym unikalnym idetyfikatorem jest oczywscie ID.

2. podczas identyfikacji rekordu poprzez opis (tytuł) na pewno wystąpi problem z polskimi znakami - dlatego: idealnym unikalnym idetyfikatorem jest oczywscie znowu ID.

Dael

Sprawa wydagląda dość prosto.

1.Pobierasz tytuł lub opis wraz z ID z bazy.

2.wyswietlajac link podaj go np w postaci:

<a href="tytul-lub-opis-z-bazy-9.html">Tutuł lub opis z bazy</a>

gdzie 9 to przykładowy nr ID pobrany z bazy.

a) zwróć uwage ze url (href) jest bez polskich znaków a spacje zastąpione są myślnikami (a nie ptrzecinkami jak sugerował Rafał). Funkcję konwertującą na "bez polskich znaków" oraz spacja=myślnik możesz napisać sam - lub poszperać - gdzieś na forum był topik na ten temat.

3. .htaccess (mod_rewrite) powinien wówczas zawierać takie wpisy

RewriteEngine On
RewriteRule ^(.*)-([0-9]*)\.html /index.php?id=$2 [L]

i tyle...

Odnośnik do komentarza
Udostępnij na innych stronach

"[500] Internal Server Error : Wewnętrzny błąd serwera" ;)

Jesli ten komunikat pojawił sie po moich przykładach to błędem może być:

RewriteEngine On
Rewritrule ^(.*)-([0-9]*)\.html /index.php?id=$2 [L]

powinno być:

RewriteEngine On

RewriteRule ^(.*)-([0-9]*)\.html /index.php?id=$2 [L]

- chodzi o brakujące "e"

Przepraszam - pisałem 'z palca'.

Odnośnik do komentarza
Udostępnij na innych stronach

W tym przykladzie znaczenie w URL ma jedynie ID - inaczej pisząć opis w url nie ma znaczenia ($1 w .htaccess jest pomijane). Jeśli chcesz to przetestować a widze, ze .htaccess już zrobiłeś to wbij w pole adresu np:

www.toja-domena.pl/obojetnie-jaki-tekst-2.html i powinien pokazać się Tobie artykuł o ID nr 2 (o ile takie ID istniej w bazie).

p.s.

Gdybyś podał adres witryny - możnaby zerknąć na to...

Odnośnik do komentarza
Udostępnij na innych stronach

na razie zbieram info do przejscia na mod_rewrite... [link w syng.]

test zakonczyl sie sukcesem "ksiega gosci" [4 po prawej] - dziala

ale przez niedostosowanie reszty serwisu, wszystko dalej sie sypie...

pozostale linki chca otwierac sie z poziomu ksiega-gosci-kg.html ;]

moj blad... braki / w linkach...

jeszcze gdybym sie dowiedzial, jak przechwycic 2 argument, ktory czasem jest a czasem go nie ma np:

aby "pliki-katalog-bron.html" uruchamialo index.php?idd=katalog&type=bron ...

Morrowind.pl - Polski serwis The Elder Scrolls V: Skyrim...

Posiadamy także informacje na temat Oblivion oraz Morrowind

Odnośnik do komentarza
Udostępnij na innych stronach

jeszcze gdybym sie dowiedzial, jak przechwycic 2 argument, ktory czasem jest a czasem go nie ma np:

aby "pliki-katalog-bron.html" uruchamialo index.php?idd=katalog&type=bron ...

Drugi argumen (pierwszy ta naprawde) jest w $1

Mozesz to przerobic tak:

RewriteEngine On
RewriteRule ^(.*)-([0-9]*)\.html /index.php?id=$2&dzial=$1 [L]

i w odpowiednim miescu w PHP odebrac to z tablicy $_GET[] a dokładniej w tym przypadku bedzie to zawarte w $_GET['dzial']

Oczywiscie nie znajac struktury serwisu trudno jest mi teraz pisać o pełnej prawidłowej konstrukcji linków oraz budowie mod_rewrite - na Twoim miejscu przeanalizowalbym taką mozliwosc:

RewriteEngine On
RewriteRule ^(.*)-([0-9]*)\.html /index.php?id=$2 [L]
RewriteRule ^(.*)-d([0-9]*)\/  /index.php?dzial=$2 [L]

(zakladam tu inaczej niz powyzej - to znaczy zakladam ze $_GET['dzial'] bedzie otrzymywala nr ID z bazy działoów a nie tytul dzialu jak w opisie pare linijek wyzej).

gdzie link do podstrony bylby:

<a href="tytul-lub-opis-z-bazy-9.html">Tutuł lub opis z bazy</a>

(bez / w adresie URL)

a link do dzialu byłby:

<a href="/tutul-dzialu-d2/">Tutuł działu</a>

(tutaj juz z / w url)

Wtedy powinne wyjsc taka struktura linkow na Twojej stronie:

/dzial-d1/   (to dział)
/dzial-d1/topik-1.html (to podstrony dzialu)
/dzial-d1/topik-2.html
/dzial-d1/topik-3.html
.....
/dzial-d2/
/dzial-d2/topik-1.html
/dzial-d2/topik-2.html
/dzial-d2/topik-3.html
....

Oczywiscie zakładam, ze dzialy takze mają swoje ID w bazie.

[edytka]

Widze ze dzialy to 'idd=skrocona-nazwa-dzilu'

w zwiazku z tym powinno to wygladac raczej tak (o ile dzialy nie są w bazie - czyli nie mają ID)

RewriteEngine On
RewriteRule ^(.*)-([0-9]*)\.html /index.php?id=$2&idd=$1 [L]

ale ten zapis zawiera błąd polegający na tym, iż skrypt 'nie bedzie wiedział' czy podany URL (np: 'opis-zawarty-w-url-12.html' to jest dział 'opis-zawarty-w-url' czy jest to tutuł topiku.

Nie pisze wiecej - bo mogę zamieszać.... masz powyzej przykłady pozwalające zrozumieć działanie mod_rewrite - reszta w Twoich rękach.

Odnośnik do komentarza
Udostępnij na innych stronach

1. obawiam się, że nie uda się uzyskać unikalnego opisy w bazach - takim idealnym unikalnym idetyfikatorem jest oczywscie ID.2. podczas identyfikacji rekordu poprzez opis (tytuł) na pewno wystąpi problem z polskimi znakami - dlatego: idealnym unikalnym idetyfikatorem jest oczywscie znowu ID.

Niekoniecznie. Mozna to rozwiazac skryptem, poprzez ktory beda dodawane kolejne podstrony do bazy danych i bedzie posiadal nastepujace funkcje:

- Po pierwsze: usuwanie znakow specjalnych, polskich znakow diakrytycznych oraz spacji z adresu podstrony;

- Po drugie: sprawdzanie unikalnosci adresu podstrony podczas dodawania;

 

Odnośnik do komentarza
Udostępnij na innych stronach

Zakładając, że np spacje zastępowane są myślnikami to czym zastąpić myślniki ?

Inczej - jeśli w adresie pojawi się myślnik skąd bedziesz wiedział czy należy go zamienić na spację czy zostawić jako myślnik (a bedziesz musiał to przetworzyć by odszukać adres w bazie) ?

Takich przykładów można mnożyć.

Odnośnik do komentarza
Udostępnij na innych stronach

zrobilem tak:

pliki identyfikuje przez koncowke p[numer pliku] np. blablabla-p543.html

dzialy przez -d-[idetyfikator dzialu] np. blablabla-d-sw_s1.html

itd dla roznych typow podstron...

i nie narzekam :)

moze malo profesjonalnie, ale google sie podoba i kazdego dnia widze nowe podstrony w site:

Morrowind.pl - Polski serwis The Elder Scrolls V: Skyrim...

Posiadamy także informacje na temat Oblivion oraz Morrowind

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności