Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [REGEX][.htaccess]domena bez www.
oscar17
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował oscar17 27.11.2008, 09:20:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
rav1989
post
Post #2





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
oscar17
post
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

Ostrzeżenie: (0%)
-----


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 ;-)

Ten post edytował oscar17 27.11.2008, 09:19:10
Go to the top of the page
+Quote Post
MitS
post
Post #4





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

Ostrzeżenie: (0%)
-----


piszę z głowy więc nie wiem czy zadziała (ale może ) (IMG:http://forum.php.pl/style_emoticons/default/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]
Go to the top of the page
+Quote Post
oscar17
post
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

Ostrzeżenie: (0%)
-----


Niestety nie o to chodzi - nie przepuści czegoś takiego np.:
Kod
$array[3] = 'subdomain.example.com';

a powinno...
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.
Go to the top of the page
+Quote Post
oscar17
post
Post #7





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

Ostrzeżenie: (0%)
-----


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'.
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




RewriteCond
Cytat
You can prefix the pattern string with a '!' character (exclamation mark) to specify a non-matching pattern.
Go to the top of the page
+Quote Post
oscar17
post
Post #9





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

Ostrzeżenie: (0%)
-----


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]
Go to the top of the page
+Quote Post
szagi3891
post
Post #10





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
oscar17
post
Post #11





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 15:45