Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne] mod_rewrite a parametry w url
d.stp
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


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 ;/

Ten post edytował d.stp 20.04.2013, 21:44:57
Go to the top of the page
+Quote Post
amii
post
Post #2





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


1. Czy twoja paginacja działa poprawnie a jeśli tak to jak wyglądają generowane URL-e ?
Go to the top of the page
+Quote Post
d.stp
post
Post #3





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


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





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował amii 20.04.2013, 22:30:08
Go to the top of the page
+Quote Post
d.stp
post
Post #5





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


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





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


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
Go to the top of the page
+Quote Post
d.stp
post
Post #7





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


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 (IMG:style_emoticons/default/wink.gif)

Ten post edytował d.stp 20.04.2013, 23:17:35
Go to the top of the page
+Quote Post
amii
post
Post #8





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Sprawdzenie czy są jakiekolwiej cyfry w query stringu ?
RewriteCond %{QUERY_STRING} [0-9]+ [NC]
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Nie ma potrzeby korzystania z RewriteCont i zmiennej QUERY_STRING, wystarczy skorzystać z flagi QSA.
Go to the top of the page
+Quote Post
d.stp
post
Post #10





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


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

Ten post edytował d.stp 21.04.2013, 00:10:17
Go to the top of the page
+Quote Post
jaslanin
post
Post #11





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


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.
Go to the top of the page
+Quote Post
d.stp
post
Post #12





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


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





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
d.stp
post
Post #14





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


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ś?
Go to the top of the page
+Quote Post
b4x
post
Post #15





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


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]
Go to the top of the page
+Quote Post
d.stp
post
Post #16





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


Jak to po co? a jak inaczej to zrobic?...

Pomoże ktoś?
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: 6.10.2025 - 16:36