Rewrite rule (duża litera bez odstępu)

0

Witam,
Potrzebuje pomocy w poprawnym sformułowaniu wyrażeń regularnych do Rewrite Rule.

Mam coś takiego:

RewriteRule ^/([a-z]+)([^A-Z][a-z0-9]+).php$ /dir/$1/$2.php

Chciałbym aby po wpisaniu ścieżki np:

adres.com/stronaPierwsza.php 

następowało przekierowanie do /dir/strona/Pierwsza.php

Proszę o pomoc.

0

[^A-Z] oznacza negację, więc raczej chciałeś napisać [A-Z]

0

Chciałbym aby pierwsza litera drugiej zmiennej była wielką literą. Reguła jest niepoprawna, myślałem że ^ to pierwszy znak. ;/

0

Tak zadziałało:

RewriteRule ^/([a-z]+)([A-Z].[a-z0-9]+).php$ /...

0

I prawie miałeś rację z tym, że ^ to pierwszy znak, choć niezupełnie.

Jeśli ^ znajdzie się na początku definicji zakresu znaków, czyli na początku treści nawiasów kwadratowych [], to ^ oznacza negację tego zakresu. Czyli jeśli normalny zakres [A-Z] oznacza litery od A do Z, to zakres z negacją: [^A-Z] oznacza "dowolne znaki, które NIE są literami od A do Z`.

Jeśli ^ jest użyte w innym miejscu, to oznacza prawie to, co myślałeś, czyli jakby "pierwszy znak".

Ale niezupełnie. Tak naprawdę oznacza nie znak, tylko pozycję przed pierwszym znakiem. Jeśli chcesz dopasować ciągi, które zaczynają się od litery A, po czym następuje jedna lub więcej cyfr, możesz użyć takiego wzorca: ^A[0-9]+ (lub krócej: ^A\d+). Fakt, że ^ nie dopasowuje tak naprawdę pierwszej litery, tylko pozycję przed pierwszą literą, ma spore znaczenie. Zauważ, że jeśli dopasowywana byłaby litera, to ciąg A123 nie pasowałby do poprzedniego wzorca, mimo że powinien. Bo daszek zostałby dopasowany do pierwszego znaku, czyli litery A, a następnie w wyrażeniu regularnym mamy po prostu A, które byłoby dopasowane do kolejnego znaku: kolejnym znakiem jest jednak cyfra 1. "A" z wyrażenia nie pasuje do "1" z ciągu i wyrażenie nie działa.

Dobrze więc, że tak nie jest i że ^ dopasowuje tylko pozycję przed pierwszym znakiem, a nie sam pierwszy znak. ^ nie zżera nam znaku. Sam fakt, że sprawdzając jakiś ciąg znajdujemy się na jego początku satysfakcjonuje ^ i do pierwszego znaku dopasowywany jest kolejny element naszego wyrażenia. W naszym przykładzie, "A" z wyrażenia dopasowywane jest do pierwszego znaku, którym jest "A" -- więc pasuje! -- a do kolejnego fragmentu wyrażenia, czyli [0-9]+ dopasowywane są kolejne znaki, czyli "123". I znowu: wszystko pasuje, ciąg dopasowany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1