Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: htaccess QSA i .*
Forum PHP.pl > Forum > PHP
metal
Witam,

Robie strone wielojezyczna z przyjaznymi linkami. Linki beda zawierac rozne znaki np. cyrylice.

Zrobilem sobie htaccessa ale wywala mi blad internal serwer error 500:

  1. RewriteRule ^(.*)[\/]{0,1}$ index.php?zmienna=$1 [L,QSA,NC]


Blad jest gdy uzyje .* wraz z QSA. Pojawia sie na serwerze home.pl Niestety nie mam podgladu logow zeby sprawdzic o co kaman.

Sprawdzilem tez tego htaccessa na ovhost i stronka sie odpala ale nie laduja sie zadne pliki graficzne, style, js'y.

Jak mozna zastapic .* aby regula dzialala dla dowolnego ciagu znakow?


Spróbowalem jeszcze jednej opcji:

  1. RewriteRule ^([a-zA-Z0-9-_%)[\/]{0,1}$ index.php?module=$1 [L,QSA,NC]


URLe zapisuje w postaci %D0%9E-%D1%84%D0%B8%D1%80%D0%BC%D0%B5

Wszystko by bylo ok ale jak wywoluje dany url to wyswiwtla sie komunikat:

  1. Not Found
  2.  
  3. The requested URL /О-фирПо was not found on this server.


Zamienia link na jakies krzaczory ;/

Jak wpisze url bez htaccessa /index.php?module=%D0%9E-%D1%84%D0%B8%D1%80%D0%BC%D0%B5
dziala ok takze to cos musi byc w htaccessie nie wiem czy jakies kodowanie trzeba ustaic dla lpiku htaccess czy
dodac jakies flagi?

Ta cyrylica mnie wykonczy... ;/
erix
Cytat
Sprawdzilem tez tego htaccessa na ovhost i stronka sie odpala ale nie laduja sie zadne pliki graficzne, style, js'y.

Problem tkwi już w konstrukcji strony, vide: http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html

Cytat
Jak wpisze url bez htaccessa /index.php?module=%D0%9E-%D1%84%D0%B8%D1%80%D0%BC%D0%B5
dziala ok takze to cos musi byc w htaccessie nie wiem czy jakies kodowanie trzeba ustaic dla lpiku htaccess czy
dodac jakies flagi?

Ta cyrylica mnie wykonczy... ;/

IMHO trochę przekombinowałeś z regułkami, home.pl ma coś z tym Rewritem zjechane (zresztą, nie tylko Rewrite, ale nie to jest tematem dyskusji), spróbuj najpierw tego:
[APACHE] pobierz, plaintext
  1. RewriteRule ^(.*?)$ index.php?module=$1 [L,QSA]
[APACHE] pobierz, plaintext

A flagę NC omiń, Rewrite lubi się żreć z wyrażeniami regularnymi operującymi na znakach narodowych, więc lepiej to powierzyć skryptowi.
metal
Pogooglowalem troche i znalazlem przyklad ktory dostosowalem do swoich potrzeb i zadzialalo party.gif

RewriteRule ^([^.]+)[\/]{0,1}$ index.php?module=$1 [L,QSA,NC]

Tylko troche nie rozumie tego zapisu dry.gif

Jestem slaby z wyrazen regularnych nie wiem po co przed . znak ^ (bez tego nie dziala)

Moze mi ktos wytlumaczyc ten zapis?
erix
Hmm, daszek na początku neguje całą klasę znaków, czyli uwzględnij wszystkie inne oprócz podanych. Kropka oznacza dowolny znak, czyli - na zdrowy chłopski rozum - uwzględnij tylko zbiór pusty.

Przyznam szczerze, że mnie ta konstrukcja trochę dziwi, bo logicznie... nie ma sensu? (przynajmniej dla mnie)
zegarek84
w zbiorze znaków [] to czy dany znak trzeba poprzedzić slashem zależy od kolejności wpisywania tam i znaczenia - już to miałem pisać ale w pierw wolałem znaleźć jakieś źródło na potwierdzenie tego (drugi wynik na "wyrażenia regularne")
http://www.egrafik.pl/kurs-regex-wyrazenia-regularne/
Cytat
Notka: Większość znaków specjalnych zawartych w zbiorze znaków jest automatycznie kapsułkowane do ich znaczenia dosłownego. Np. /[.]/ pasuje do . a nie do wszystkich znaków oprócz końca linii.

jednak ja dla pewności prawie zawsze poprzedzam znaki specjalne slashem choć nie zawsze - i co język zdarzają się drobne niuanse w wyrażeniach regularnych

nie chce mi się sprawdzać ale dla mnie regułka:
RewriteRule ^([^.]+)[\/]{0,1}$ index.php?module=$1 [L,QSA,NC]
znaczy tyle - całość do pierwszej kropki lub jak jej nie będzie to do końca... i dalej dla mnie bez sensu jest zapis [\/]{0,1} gdyż ze względu na zachłanność zostanie wchłonięte przez pierwszy człon a zgodnie z definicją nie musi wystąpić ( wyrażenie [\/]{0,1} jest równoznaczne [\/]? )
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.