Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Wyrażenia regularne]Zaprzeczenie, negacja
Forum PHP.pl > Forum > PHP
ShadowD
Dziś przez kilka godzin szukałem odpowiedzi na moje pytanie i jej nie odnalazłem co więcej wydaje mi się, że owa możliwość w ogóle nie istnieje w wyrażeniach regularnych.

Przypuśćmy że mamy kilka adresów:
www.aaa.qw.pl
www.bbb.qw.pl
www.bbb.qw,pl
www.ddd.qw.pl

I chcemy napisać prostą regułę która dopisze www gdy ktoś poda adres w postaci aaa.pl czy ddd.pl.
Możemy napisać coś w stylu:
RewriteCond %{HTTP_HOST} ^www.([a-z0-9]*).qw.pl$
RewriteRule (.*) http://www.%1.qw.pl [R,L]

Teraz nasuwa się wielkie pytanie, czy jest możliwość zaprzeczenia pogrubionej części wyrażenia??

Na pewno można zaprzeczyć znakom np:
[^a-z]
Czy też całości:
!^......$
Ale możemy tego dokonać do zwykłego 4 znakowego ciągu a może w ogóle powinienem zabrać się do tego problemu z innej strony??

Z góry dziękuję za pomoc...
magra
może tak?

RewriteCond %{HTTP_HOST} ^(www.){0}([a-z0-9]*).qw.pl$

nie sprawdzałem czy działa
skim
a nie tak: ^[www] ? uważaj na kropki. backslesha używaj jeśli kropka nie jest dowolnym znakiem... a tutaj tak jest:
Kod
^www.([a-z0-9]*).qw.pl$
ShadowD
^www.([a-z0-9]*).qw.pl$
Ta reguła wykona się wtedy gdy link zawiera www a mi chodzi by przekierować gdy w linku brakuje www.

Rozwiązanie magra zaraz przetestuje ale wydaje mi się że jest ok...
erix
  1. escape'uj kropkę, bo to jest znak specjalny
  2. daj przed warunkiem w RewriteCond wykrzyknik, to wtedy będziesz miał negację warunku. winksmiley.jpg
ShadowD
1. Tak wiem że powinien być tam '/' ale to nie ma znaczenia, chce zaprzeczyć 'www.' więc muszę uznać to za ciąg a w ciągu już nie będzie musiał stać '/'.
2. Mam inne domeny które również dziedziczą owe warunki więc wedle twojego pomysłu musiał bym zanegować ciąg 'qw.pl' jednak jest to dokładnie taka sama sytuacja jak w przypadku zaprzeczania 'www.'.

Czekam na dalsze pomysły i sam poluję na coś w sieci...
erix
Nie, czemu?

Kod
RewriteCond %{HTTP_HOST} !^www\.(.+)
RewriteRule . http://www.%1

Pisane z palca.
ShadowD
Źle ponieważ dalej dajesz !^www\.(.+) co oznacza jedno albo więcej wystąpień, w przypadku 'qw.pl' będzie błąd...
erix
Ale czemu będzie błąd? To jest uniwersalne rozwiązanie. A jedno lub więcej wystąpień NIE ODNOSI się do www.. tongue.gif
ShadowD
No nie ale do reszty, coś mi się musiało pokręcić już załogo nad tym siedzę zaraz przetestuję twoje rozwiązanie a tymczasem mój wymysł:

RewriteCond %{HTTP_HOST} !^www.([^a-z0-9./]*)$
RewriteRule (.*) http://www.%1 [R]

Niestety nie działa z:
http://fala.cmsss.pl/
Tworzy:
http://www..com

Może jakiś pomysłquestionmark.gif ;p

EDIT:
Twoje rozwiązanie prowadzi do identycznego wyniku z:
http://fala.cmsss.pl/
Tworzy:
http://www..com
erix
Kod
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
ShadowD
Ahhh zapomniałem o zmiennych...

Co nieco jeszcze jest źle ale to już sobie poprawie wielkie dzięki.

Poprawiony kod:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^cmsss/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
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.