Skocz do zawartości

Zdjęcie
- - - - -

Nginx rewrite


Najlepsza odpowiedź unbreak, 22 kwietnia 2014 - 08:13

Nooo, to w takim razie to będzie coś takiego:

rewrite ^/t(\d+)(-(\d+))?$ /topic.php?id=$1&strona=$3 last;

;]

Przejdź do postu


10 odpowiedzi w tym temacie
  • Zaloguj się, aby dodać odpowiedź
Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 17 kwietnia 2014 - 21:38

#1

Cześć.
Potrzebuje zrobić rewrite pliku i jego argumentów w URL'u- ukryć kolejne za slashami i płazami np:

example.com/topic.php?id=23
example.com/t23

 [czyli pierwsza litera- "t" -oznacza plik- topic.php a kolejne cyfry oznaczają parametr- id]
 
drugim argumentum jest paginacja [za płazą]:

example.com/topic.php?id=23&strona=2
example.com/t23-2

[fajnie by było, gdyby dla argumentu "strona" równemu jeden robiło redirekta 301 na link bez tego argumentu]
 
Jako, że takie coś jest łatwe do sforsowania- utworzenie linków do duplicate content potrzebuje ustawić limit tych parametrów, czyli zablokowanie możliwości dopisywania kolejnego slasha z ciągiem. Np:

example.com/t23-2/zly-link-do-duplikatu
example.com/404.php

Pomoc w każdej postaci mile widziana.


  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 18 kwietnia 2014 - 08:22

#2

Hehe, z rozpędu chciałem Ci podać rewrite'a dla IIS :P

Co do nginxa to bardzo dawno miałem z nim do czynienia i aktualnie nie mam do niego dostępu, także podaję na sucho:

server {
    server_name  www.example.com  example.com;
    rewrite ^t(\d+)(-\d+)?$ /topic.php?id=$1&strona$2 last;
    return  403;
}

Sprawdź czy w ogóle działa - nie pamiętam czy przed pauzą nie powinno być backslasha


  • 1

webDeveloper


Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 18 kwietnia 2014 - 11:15

#3

Wywala mi error'a 403. Z backslashem również.
Jeszcze przy okazji mam pytanie. Jeżeli mam kilka plików do których chce zastosować podobną regułę jak do topic.php muszę zastosować osobne bloki location? np:

server{
	location /t^. {
		rewrite ^t(\d+)(-\d+)?$ /topic.php?id=$1&strona$2 last;
	}
 	
	location /logowanie^. {
		rewrite ^logowanie(\d+)(-\d+)?$ login.php?id=$1& last;
	}
}

BTW- kolejne zmienne [w nich wrażenia regularne] ustawiam w nawiasach okrągłych?
 
 

Aktualnie całość pliku wygląda tak:

Spoiler

  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 18 kwietnia 2014 - 11:38

#4

Wrzuć tak jak napisałeś, nie dawaj tego return;

location /t^. {
	rewrite ^t(\d+)(-\d+)?$ /topic.php?id=$1&strona$2 last;
}
 	
location /logowanie^. {
	rewrite ^logowanie(\d+)(-\d+)?$ login.php?id=$1& last;
}

  • 0

webDeveloper


Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 18 kwietnia 2014 - 11:53

#5

Bez return nie wypluwa błędów, ale nie przepisuje argsów:

Dla np. eample.com/t23 nie przepisuje do example.com/topic.php?id=23 , a wyświetla defaultową stronę.

Wezmę poszperam w doc'u, może coś ogarnę


  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 18 kwietnia 2014 - 12:00

#6

Mi osobiście coś to nie pasuje: 

location /t^. 

skąd to wziąłeś?

Spróbuj dać tak:

location / {
    rewrite ^t20$ /topic.php?id=20 last;
}

i sprawdź czy jak wejdziesz na t20 to zadziała, jeżeli zadziała to będziemy modyfikować. Jeżeli nie zadziała to znaczy że coś już tutaj jest nie tak :)


  • 0

webDeveloper


Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 18 kwietnia 2014 - 12:32

#7

Do Twojego kodu- działa, ale trzeba jeszcze dodać slasha przed t20$
 
Z tym:

location /t^. 

chodziło mi o to, by utworzyć osobne bloki dla różnych plików. Wsadziłem tu wyrażenie regularne- t^. pasuje chyba dla "topic"- ^ rozpoczynam wyrażenie, a kropka zastępuje dowolne znaki.

 

 

 

 

 

edit:

Zmodyfikowałem kod nieco, i działa [łącznie z paginacją]:

rewrite ^/t(\d+)-(\d+)?$ /topic.php?id=$1&strona=$2 last;

Użytkownik Michał edytował ten post 18 kwietnia 2014 - 12:50

  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 18 kwietnia 2014 - 14:50

#8

minus (myślnik) też musisz dać nawias:

rewrite ^/t(\d+)(-\d+)?$ /topic.php?id=$1&strona=$2 last;

Ale możliwe że trzeba przed niego dać również backslash. Ponieważ ten znak również jest alternatywny. Założę się że przy Twoim rozwiązaniu taki link:

/t29

nie działa ;)


Użytkownik unbreak edytował ten post 18 kwietnia 2014 - 14:51

  • 0

webDeveloper


Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 18 kwietnia 2014 - 15:36

#9

Racja- t29 nie zadziała :).
Ale znowu jak dam minus w drugi nawias, to wartość argumentu "strona" jest ujemna [z backslashem tak samo].


  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 22 kwietnia 2014 - 08:13   Najlepsza odpowiedź

#10

Nooo, to w takim razie to będzie coś takiego:

rewrite ^/t(\d+)(-(\d+))?$ /topic.php?id=$1&strona=$3 last;

;]


  • 2

webDeveloper


Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 22 kwietnia 2014 - 12:17

#11

Heh myślałem, że będę liczył wartość bezwzględną, a wystarczyło dołożyć trzeci argument. Dzięki ! :D


  • 0





Podone tematy Collapse

  Temat Forum Autor Podsumowanie Ostatni post

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych