Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [REGEX][.htaccess]domena bez www.
Forum PHP.pl > Forum > PHP
oscar17
Witam mam problem - nie mogę ułożyć wyrażenia regularnego, który zwróci true dla każdego wyrazu który nie będzie miał 'www.' na początku. W przeciwnym razie dostaje false.
Np.
  1. <?php
  2. $array[1] = 'example.com';
  3. $array[2] = 'www.example.com';
  4. $array[3] = 'wp.pl';
  5. $array[4] = 'subdomain.example.com';
  6. $array[5] = 'www.subdomain.example.com';
  7. ?>


dla elementów {1,3,4} będzie true, a dla {2,5} będzie false.
Chodzi mi o konkretne wyrażenie - takie do zastosowania w .htaccess
rav1989
Witam
Przy pomocy PHP wyglądałoby to tak:

  1. <?
  2. function sprawdz($wyrazenie,$tresc){
  3. if(!preg_match( $wyrazenie , $tresc)){
  4.    return 'bez WWW';
  5. }else{
  6.    return 'z WWW';
  7. }
  8.  
  9. }
  10. $array[0] = 'example.com';
  11. $array[1] = 'www.example.com';
  12. $array[2] = 'wp.pl';
  13. $array[3] = 'subdomain.example.com';
  14. $array[4] = 'www.subdomain.example.com';
  15. $wyrazenie ='/www./';
  16. for($i=0;$i<count($array);$i++){
  17. echo 'Strona '.$array[$i].' jest <b>'.sprawdz($wyrazenie,$array[$i])."</b> na poczatku<br>";
  18. }
  19.  
  20. ?>


Co powinno wyświetlić:
Cytat
Strona example.com jest bez WWW na poczatku
Strona www.example.com jest z WWW na poczatku
Strona wp.pl jest bez WWW na poczatku
Strona subdomain.example.com jest bez WWW na poczatku
Strona www.subdomain.example.com jest z WWW na poczatku


P.S.
Tablica zaczyna się od 0 poprawiłem to smile.gif

Pozdrawiam
oscar17
Super, tylko mi chodziło żeby wyrażenie regularne byłu true dla stringów które nie mają www, a u Ciebie jest odwrotnie.
Chyba że da się to inaczej załatwić w .htaccess - chcę zrobić uniwersalny kod, aby przekierowało mi wszystkie strony bez www. na takie z www.
Np dla domeny example.com mogło by być:
Kod
RewriteEngine On    
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Ale chciałbym odpowiednio zmodyfikować drugą linijkę, żeby niezależnie do jakiej domeny podepnę ten .htaccess to tak działało.
Może ktoś ma inne pomysły?

PS. Co do tablic to mogą się zaczynać od takiego elementu jakiego ty im nadasz ;-)
MitS
piszę z głowy więc nie wiem czy zadziała (ale może ) smile.gif

Kod
RewriteEngine On    
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.([a-z]{2,4})$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
oscar17
Niestety nie o to chodzi - nie przepuści czegoś takiego np.:
Kod
$array[3] = 'subdomain.example.com';

a powinno...
erix
Cytat
Witam mam problem - nie mogę ułożyć wyrażenia regularnego, który zwróci true dla każdego wyrazu który nie będzie miał 'www.' na początku. W przeciwnym razie dostaje false.

Jeśli w php, to nie strzelaj do muchy z armaty, wystarczy strpos" title="Zobacz w manualu PHP" target="_manual.

Cytat
Chyba że da się to inaczej załatwić w .htaccess

:
Cytat
^
The ^ (circumflex or caret) inside square brackets negates the expression (we will see an alternate use for the circumflex/caret outside square brackets later), for example, [^Ff] means anything except upper or lower case F and [^a-z] means everything except lower case a to z.
oscar17
Cytat(erix @ 27.11.2008, 12:31:33 ) *
^
The ^ (circumflex or caret) inside square brackets negates the expression (we will see an alternate use for the circumflex/caret outside square brackets later), for example, [^Ff] means anything except upper or lower case F and [^a-z] means everything except lower case a to z.


Ok, to wiem, ale jak to zastosować do całego wyrażenia 'www.', a nie dla jednego znaku bo kombinowałem na różne sposoby i wyszło mi co najwyżej że jeżeli 3 pierwsze znaki są różnie od 'w' to przechodziło, ale wtedy już mi odrzucało np. 'wp.pl'.
erix
RewriteCond
Cytat
You can prefix the pattern string with a '!' character (exclamation mark) to specify a non-matching pattern.
oscar17
Dzięki erix - o to właśnie mi chodziło.
I jeśli dobrze zrobiłem - późna pora, ale na przykładzie mi działa to uniwersalny wpis do .htaccess aby wszystkie strony bez www. przekierowywał na z www. wygląda tak:
Kod
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
szagi3891
Ja bym doradzał taki wpis :

  1. <?php
  2. RewriteEngine On
  3. RewriteCond %{HTTP_HOST} !^www.domena.pl$
  4. RewriteRule .* <a href=&#092;"http://www.domena.pl\" target=\"_blank\">http://www.domena.pl</a> [R=301]
  5. ?>


Wtedy jest pewność że na stronę nastąpiło wejście wyłącznie po nazwie danej domeny.
Może się zdarzyć sytuacja że na serwer są przekierowane dwie domeny. Wtedy mamy pewność że strona zawsze pod jednym adresem się otwiera.
oscar17
Ja rozumiem, ale ten wpis który utworzyłem był takim na którym najbardziej mi zależało - różne strony trzymam w różnych katalogach i nie chce mi się optymalizować w każdym .htaccess pod daną domenę - wolę mieć uniwersalny...
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.