Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne] mod_rewrite a parametry w url
Forum PHP.pl > Forum > Przedszkole
d.stp
Używam mod_rewrite do przyjaznych linków na swojej stronie, ale mam mały problem ponieważ wprowadziłem paginację wyników z bazy i nie wiem za bardzo jak mam się teraz odwołać do konkretnej strony w paginacji.

Mam np. taki url:

nazwa_strony.pl/artykuly/

I na tej podstronie wyświetlam wyniki z bazy, żeby przejść do następnej strony wyników muszę dodać parametr "p" do urla, ale jak dodam taki:

nazwa_strony.pl/artykuly/?p=3

to dalej pokazuje mi się strona 1, tak jakby nie czytało tego parametru...

Jak to ugryźć w htaccess? dodam, że nie chcę robić artykuly/1 itd., a raczej nie mogę, bo po wejściu w jakiś artykuł mam coś takiego w urlu:

artykuly/nazwa-artykulu/

A jak dam artykuly/1 to skrypt nie będzie wiedział czy to strona paginacji czy podstrona z artem ;/
amii
1. Czy twoja paginacja działa poprawnie a jeśli tak to jak wyglądają generowane URL-e ?
d.stp
Działa poprawnie, bo jak wchodzę normalnie bez mod_rewrite czyli bezpośrednio index.php?page=artykuly&p=1/2/3.. lub index.php?page=artykuly&id=nazwa-arta to wszystko działa tak jak powinno.
amii
RewriteRule ^artykuly/([0-9]+)$ index.php?page=artykuly&p=$1 [L,NC]
RewriteRule ^artykuly/?$ index.php?page=artykuly [L,NC]

No i wpisujesz linki:
nazwa_strony.pl/artykuly/
nazwa_strony.pl/artykuly/(0-9)
Jeśli regułki będą ułożone od szczegółu do ogółu to pierwszą będzie łapał dla linków z parametrem paginacji, jeśli takiej nie znajdzie to ewentualnie chwyci drugą.
EDIT: możesz jeszcze dopisać flagi L dla zwiększenia wydajności smile.gif
d.stp
no właśnie tak nie działa, bo już tak próbowałem...

Mi chodzi raczej o coś takiego:

RewriteCond %{QUERY_STRING} ^p=([0-9]*)$ [NC]

ale nie wiem jak to do końca zmodyfikować pod moją stronę... nie znam się kompletnie na wyrażeniach regularnych
amii
Nie działa tzn. nie przepisuje wyrzuca błąd ?

Może tak spróbuj:
RewriteCond %{QUERY_STRING} ^p=([0-9]*)$ [NC]
RewriteRule .* index.php?page=artykuly&p=$1 [L,NC]

RewriteCond %{REQUEST_URI} ^artykuly/?$ [NC]
RewriteRule .* index.php?page=artykuly [L,NC]

Link: nazwa_strony.pl/artykuly/?p=3
d.stp
Teraz jak przejdę pod taki url:

nazwa_strony.pl/artykuly/?p=2

to nie wyświetla mi wyników - nie czyta w ogóle GETa

Reszta ok.

Całość:

Kod
RewriteEngine on
DirectoryIndex index.php
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{QUERY_STRING} ^p=([0-9]*)$ [NC]
RewriteRule .* index.php?page=artykuly&p=$1 [L,NC]

RewriteCond %{REQUEST_URI} ^artykuly/?$ [NC]
RewriteRule .* index.php?page=artykuly [L,NC]

RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&id=$2 [NC,L,QSA]
RewriteRule ^([a-zA-Z-_0-9]+)/?$ index.php?page=$1 [L]


Edit:
za pomoc dam na piwo wink.gif
amii
Sprawdzenie czy są jakiekolwiej cyfry w query stringu ?
RewriteCond %{QUERY_STRING} [0-9]+ [NC]
Crozin
Nie ma potrzeby korzystania z RewriteCont i zmiennej QUERY_STRING, wystarczy skorzystać z flagi QSA.
d.stp
Crozin, Niestety nie działa

amii, nie wiem o co chodzi ;/

próbowałem tak:

RewriteRule /artykuly/(.+) /index.php?page=artykuly?p=$1 [QSA]

Udało mi się zrobić. Ale jest następny problem...

Mam takie coś teraz:

Kod
RewriteEngine on
DirectoryIndex index.php
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=artykuly&p=$1 [QSA]
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&id=$2 [L]
RewriteRule ^([a-zA-Z-_0-9]+)/?$ index.php?page=$1 [L]


Problem jest w tym, że jak przejdę pod adres: nazwa_strony.pl/artykuly/nazwa-artykulu/ to mod rewrite traktuje to jakbym chciał wyświetlić taką stronę w paginacji... ;/ pewnie prosta sprawa, ale jak pisałem ja się na tym nie znam
jaslanin
Kod
RewriteRule ^(.*)$ index.php?page=artykuly&p=$1 [QSA]


no bo ta reguła łapie ci wszystkie adresy url i kolejne nie mają szansy sie wykonać bo URL został już przetworzony.
d.stp
Po całej nocce kombinowania udało mi się zrobić tak, że doklejany parametr już działa, ale teraz jest problem bo jak wejdę na podstronę artykuly/ to nie pokazują mi się żadne wyniki, jest tylko paginacja... Jak dopiszę parametr ?p=X to wtedy ładnie działa. Po wejściu w artykuly/nazwa-arta/ też ładnie się wyświetla.

Całość:

Kod
RewriteEngine on
DirectoryIndex index.php
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^artykuly/$ index.php?page=artykuly&p=$1 [QSA]
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&id=$2 [L]
RewriteRule ^([a-zA-Z-_0-9]+)/?$ index.php?page=$1 [L]


Proszę o pomoc
Crozin
W pierwszym RewriteRule odnosisz się do pierwszej grupy wyłapanych znaków (p=$1), jednak nigdzie nie tworzysz tej grupy - we wzorze brak (...). Takie coś powinno generować Ci błąd. Co więcej nie dodałeś przy tej regule flagi L przez co porównywanie następuje dalej - ostatnia reguła również wyłapie taki URL.

PS. RewriteCond dotyczy jedynie jednej reguły RewriteRule, następującej tuż po nim.
d.stp
Ale nie pisz mi co robię tylko powiedz mi jak to zrobić żeby działało, bo ja się na tych regułkach kompletnie nie znam i nie mam zamiaru teraz się tego uczyć bo nie mam na to czasu...

Dodałem flage [L, QSA] ale dalej to samo

Pomoże ktoś?
b4x
A po co tak kombinujesz?

Kod
RewriteRule ^([a-zA-Z-_0-9]+)/?$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&id=$2 [L]
d.stp
Jak to po co? a jak inaczej to zrobic?...

Pomoże ktoś?
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.