Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mod_rewrite] (chyba) proste przekierowanie
Forum PHP.pl > Forum > PHP
kebq
witam
przepraszam jesli poruszam cos co juz bylo, widocznie nie doszukalem sie
przyznam ze jestem poczatkujacy jesli chodzi o mod rewrite
mianowicie mam adres typu:
strona.php?id=NUMER_ID
i chcialbym go przekierowac na:
DOWOLNY_CIAG_ZNAKOW-NUMER_ID.html
numer ID w jednym i drugim adresie sie nie zmienia,
dodany zostaje tylko ten dowolny ciag znakow w ktorym bedzie przemycany tytul ;-)
czy cos takiego jest mozliwe?
ave
chyba odwrotnie z DOWOLNY_CIAG_ZNAKOW-NUMER_ID.html na strona.php?id=NUMER_ID
  1. RewriteEngine On
  2. RewriteRule ^dowolny_ciag_znakow-([0-9]*).html            /strona.php?id=$1 [L]
kebq
chodzi o to ze ten dowolny ciag znakow bedzie prawdopodobnie inny dla kazdego id (bedzie to przefiltrowany z polskich i specjalnych znakow tytul) wiec zamiast niego chyba takze trzeba by bylo wstawic jakies wyrazenie regularne
ave
no to
  1. RewriteRule -([0-9]*).html$            /strona.php?id=$1 [L]

wtedy wszystko z koncowka -ID.html pujdzie na /strona.php?id=ID
kebq
a gdybym chcial przed cos-ID.html wstawic niezmienny ciag udajacy folder to moge to zrobic tak?:
  1. RewriteRule folder/-([0-9]*).html$            /strona.php?id=$1 [L]

czy tez moze
  1. RewriteRule ^folder/-([0-9]*).html$            /strona.php?id=$1 [L]

w sumie nie do konca rozumiem funkcje karetki-daszku na poczatku regulki (^)
siemakuba
Cytat(kebq @ 30.05.2006, 18:34 ) *
w sumie nie do konca rozumiem funkcje karetki-daszku na poczatku regulki (^)

karetka-daszek - przepiękne określenie :)
do rzeczy, karetka-daszek ( :):) ) oznacza że jest to dokładnie początek ciągu który będziesz porównywał.

pierwsza opcja którą przedstawiłeś będzie pasowało do wszystkiego co będzie zawierało ciąg folder/-([0-9]*).html, np. folder/-12.html, siemafolder/-12.html

druga opcja, będzie pasowała do wszystkiego, co dokładnie pasuje do wzorca folder/-([0-9]*).html, więc folder/-12.html będzie pasowało, ale siemafolder/-12.html już nie.

^ - początek wzorca
$ - koniec wzorca

zbadaj tutaj: http://pl2.php.net/manual/pl/reference.pcr...tern.syntax.php - zasady są takie same.

pozdr.
kebq
tyle ze zarowno
  1. RewriteRule folder/-([0-9]*).html$            /strona.php?id=$1 [L]

jak i
  1. RewriteRule ^folder/-([0-9]*).html$            /strona.php?id=$1 [L]

bedzie pasowac chyba tylko do folder/-LICZBA.html czyli miedzy slashem a myslnikiem znika mi mozliwosc wstawienia tytulu jaka mialem tu
  1. RewriteRule -([0-9]*).html$            /strona.php?id=$1 [L]

jak dostosowac ta powyzsza regulke poprawnie obslugiwala URL folder/DOW_CIAG_ZNAKO-NUMER_ID.html?

BTW karetka-daszek wyszla z tego ze zaczalem sobie czytac o regulach i wyrazeniach i ten znak byl opisywany na przemian jako karetka i jako daszek biggrin.gif
siemakuba
Kod
RewriteRule ^folder/[^-]*-([0-9]*).html$            /strona.php?id=$1 [L]

zamiast [^-]* możesz ograniczyć np. do samych liter ( [a-z] ), do liter i cyfr ( [a-z0-9] ).
[^-] oznacza dowolny znak oprócz - (myślnik).

jezeli będziedsz ograniczał do np. tylko liter, możesz do flagi [L] dopisać jeszcze flagę NC, wtedy nie będzie miała znaczenia wielkość znaków. ([L,NC])

pozdr.
kebq
pozwol jeszcze ze zapytam czym dokladnie rozni sie gwiazdka (asteriks winksmiley.jpg od plusa? czy obydwa lacza ciagi?

EDIT: po zastosowaniu ciagu ktory podales strona cie kaszanii, do URLi wkrada sie ten ciag "folder/" tzn. linki wygladaja tak strona.pl/folder/obrazek.jpg przez co nie laduja sie obrazki, css i cala reszta
siemakuba
Kod
pozwol jeszcze ze zapytam czym dokladnie rozni sie gwiazdka (asteriks od plusa? czy obydwa lacza ciagi?

żadne z nich nie łączy ciągów :) no, chyba że inaczej rozumiemy te pojęcie
* - łapie 0 lub więcej znaków które poprzedzają *
+ - łapie 1 lub więcej znaków które poprzedzają +

Kod
po zastosowaniu ciagu ktory podales strona cie kaszanii, do URLi wkrada sie ten ciag "folder/" tzn. linki wygladaja tak strona.pl/folder/obrazek.jpg przez co nie laduja sie obrazki, css i cala reszta

rozumiem, że obrazek powinien załadować się z adresu strona.pl/obrazek.jpg a nie strona.pl/folder/obrazek.jpg
wzięło się to z tego, że przeglądarka myśli że jesteś w podkatalogu /folder. A nie jesteś, ale to wie dopiero Apache :) Domyślam się też, że linki do obrazków, arkuszy css masz podane relatywnie?
  1. <img src="obrazek.jpg">
  2. <link rel="stylesheet" href="style.css">
Masz dwa rozwiązania:
1. wszystkie linki robisz absolutne:
  1. <img src="http://strona.pl/obrazek.jpg">
  2. <link rel="stylesheet" href="http://strona.pl/style.css">

2. dodajesz w sekcji <head> tag <base>
  1. <base href="http://strona.pl/">
i wtedy wszystkie linki relatywne będą rozwiązywane na podstawie atrybutu href tego taga.

pozdr.
kebq
wielkie dzieki!
nad tym base glowkowal bym pewnie kilka dni tongue.gif
a tak na powaznie to wszystko juz dziala

BTW do osob czytajacych to w przyszlosci:
tag base dodajemy przed jakimkolwiek linkiem
np. powinien byc koniecznie przed linkowaniem do cssow
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.