![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 29.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Chciałem na swojej małej stronie wprowadzić mechanizm ładnych linków, przyjaznych URL, czy jak to jeszcze można nazwać. Chciałbym aby następująco były tłumaczone adresy: example.com/cokolwiek -> example.com/index.php?page=cokolwiek example.com/cokolwiek/ -> example.com/index.php?page=cokolwiek example.com/article -> example.com/index.php?page=article?article=1 example.com/article/ -> example.com/index.php?page=article?article=1 example.com/article/jakis -> example.com/index.php?page=article?article=jakis example.com/article/jakis/ -> example.com/index.php?page=article?article=jakis Mój plik .htaccess wygląda aktualnie następująco: Kod RewriteRule ^article/(.+)/$ index.php?page=article&article=$1 RewriteRule ^article/(.+)$ index.php?page=article&article=$1 RewriteRule ^article/$ index.php?page=article&article=1 RewriteRule ^article$ index.php?page=article&article=1 RewriteRule ^(.+)/$ index.php?page=$1 RewriteRule ^(.+)$ index.php?page=$1 Przykład nie działa dla żadnego przypadku: zawsze $_GET = Array ( [jeden] => index.php ) Gdy wykomentuję dwie ostatnie linijki, działa to dla podstron article w każdej kombinacji z powyższych. Gdzie leży błąd w moim myśleniu? Wiem że można ten plik wygenerować "ręcznie" dla każdego możliwego przypadku www.example.com/cokolwiek ale chciałbym oprzeć to na wyrażeniu regularnym. Głupio mi prosić o gotowca, ale niestety nie potrafię sam rozwiązać tego problemu (wiem, że w necie jest pełno poradników, ale nadal coś w mojej głowie nie zaskoczyło) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzieje sie tak dlatego, ze Apache wykonuje nowe zapytanie dla kazdego rewrite, dodaj np. &rw=1 i sprawdzaj czy nie ma:
Kod RewriteCond %{QUERY_STRING} !&rw=1$ [NC] RewriteRule ^article/(.+)/?$ index.php?page=article&article=$1&rw=1 RewriteRule ^article/?$ index.php?page=article&article=1&rw=1 RewriteRule ^(.+)/$ index.php?page=$1&rw=1 RewriteRule ^(.+)$ index.php?page=$1&rw=1 Ten przykład jest bardzo prosty, poniewaz latwo go zlamac wpisujac &rw=1 na koncu, ale mozesz zrobic wiecej zapytan i np. dodac query_string jako pierwszy, a dopiero pozniej parametry przepisywane. Ten post edytował artuross 30.03.2013, 17:24:31 -------------------- Pomoglem? Daj pomogl!
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 29.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Nie bardzo rozumiem na czym polega twoje rozwiazanie... Co ma dac mi zmienna dodana na koncu wyrazenia?
Jeszcze jedno pytanie - tak dla upewnienia. Wszystkie te rewrite dotycza tylko adresow "na pasku" czy tez linkow w kodzie, odwolan do css czy obrazkow itd? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Milions, przedstawie Ci to "wizualnie".
1. Wpisujesz w pasku adresu http://example.com/przyklad Zostaje wykonane zapytanie i serwer przechwytuje je, teraz serwer /przyklad przekierowuje na ?strona=przyklad, ale tak naprawde jest to zupelnie nowe zapytanie, dokladnie tak, jakbys w przegladarce sprobowal teraz wpisac http://example.com/?strona=przyklad. Po prostu musisz powiedziec Apache, ze to jest przekierowanie, ktore on sam wykonal, dlatego dodalem te zmienne, zeby Apache wiedzial, ze teraz nie ma wykonywac przekierowania. 2. Dziala dla kazdego zapytania dla serwera, czyli CSS, HTML, JS i cokolwiek sobie wymarzysz. Ten post edytował artuross 30.03.2013, 17:17:22 -------------------- Pomoglem? Daj pomogl!
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 29.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
A wiec moj ptzyklad popsuje calkowicie szablon strony bo bede musial w ten sam sposob podlinkowac wsztskie .css itd? Czy mozna jakos wykluczyc css jpg gif etc etc?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mozna, mozesz dodac warunki, ze request_filename musi konczyc sie inaczej niz .html lub .css itd., albo mozesz stworzyc taki warunek, ktory wykluczy wszystkie istniejace pliki.
EDIT, a jezeli mowisz o tych konkretnych, ktore Ty masz dodane, to psuja ostatnie 2 warunki. Ten post edytował artuross 30.03.2013, 17:24:14 -------------------- Pomoglem? Daj pomogl!
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 29.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Moglbys napisac dla mnie zalazek takiego czegos?
![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Czego dokladnie, bo podalem 2 opcje
![]() Jezeli chcesz zeby wykluczalo sciezki, ktore sa realnymi sciezkami do pliku to po prostu dodajesz Kod RewriteCond %{REQUEST_FILENAME} !-f
// a tutaj reszta Ten post edytował artuross 30.03.2013, 17:31:21 -------------------- Pomoglem? Daj pomogl!
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 29.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ok to wiem. Ale do pytania z pierwszego postu. Dlaczego zle zostaje dopasowany link?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ehh, no pisalem, po prostu wykonuje sie kilka tych zapytan po raz kolejny, az wynikiem wyjsciowym jest index.php (poniewaz zostalo wykonane 5 zapytan, a chyba tyle jest maksem w podstawowej konfiguracji Apache). Po prostu musisz dodac jaki parametr konczacy. Sam ostatnio mialem z tym problem, wiec jestem pewien, ze podaje Ci poprawne informacje.
EDIT Albo inaczej. U Ciebie jest cos takiego Kod RewriteRule ^(.+)$ index.php?page=$1 A teraz zobacz ciag zapytan dla /abc: /abc -> index.php?page=/abc index.php?page=/abc -> index.php?page=index.php?page=/abc index.php?page=index.php?page=/abc -> index.php?page=index.php?page=index.php?page=/abc itd., itd. az nadchodzi 5. przekierowanie, a wtedy Apache mowi dosc! Zrobilem juz 5 przekierowan, nie bedziesz mnie w jajo robil Ty zwykly, ziemski uzytkowniku. Ten post edytował artuross 30.03.2013, 17:49:49 -------------------- Pomoglem? Daj pomogl!
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 06:27 |