[Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.

Discussion in 'PHP' started by .:EnoT:., 19 Nov 2008.

Thread Status:
Not open for further replies.
  1. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Вопщем нужно сделать два сайта (вит.хоста) на одном IP. Стоит nginx+Fast-cgi+ssl

    как правильно настроить Rewrite в конфиге nginx?

    Нужно сделать так, что при любом http запросе к любому домену кидало в корни сайтов на скрипты redir.php, а от туда уже идёт переадресация по https протоколу на корневые индексы сайтов (index.php)

    Чтоб было яснее привожу конфиг:
    Code:
     user www-data;
    worker_processes  4;
    worker_rlimit_nofile 32768;
    error_log  /var/log/nginx/error.log;
    
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
        
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
    limit_zone   one  $binary_remote_addr  10m;
    limit_conn one 5;
    
        access_log	/var/log/nginx/access.log;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  60;
        tcp_nodelay        on;
    
        gzip  on;
    
        server {
            listen       80;
            server_name  site_name1;
    
    fastcgi_intercept_errors on;
    
            access_log  /var/log/nginx/site_name1.access.log;
    
            location / {
    
    root   /var/www;	
    #if (!-f $request_filename){
    #if ($request_uri !~ google)
    #rewrite ^.*$ /redir.php ;
    #break;
    #}
    rewrite ^.*$ /redir.php ;
        
                index  index.html index.htm index_x.php index.php;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /var/www;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
    #redirect /redir.php$ /.php 
    
    rewrite ^.*$ /redir.php;
    			
    #if ($request_uri !~ google)
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            
            location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  redir.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/$fastcgi_script_name;
    	     fastcgi_param HTTPS on;
                include        /etc/nginx/fastcgi_params;
            }
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
        server {
            listen       80;
            server_name  site_name2;
    
    fastcgi_intercept_errors on;
    
            access_log  /var/log/nginx/site_name2.access.log;
    
    	location / {
    
    root   /var/www/site_name2;	
    #if (!-f $request_filename){
    #if ($request_uri !~ google)
    #rewrite ^.*$ /redir.php;
    #break;
    #}
    	rewrite ^.*$ /redir.php;
        
                index  index.html index.htm index_x.php index.php;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /var/www/site_name2;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
    #redirect /redir.php$ /.php 
    
    rewrite ^.*$ /redir.php ;
    			
    #if ($request_uri !~ google)
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            
                location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  redir.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/site_name2/$fastcgi_script_name;
    	     fastcgi_param HTTPS on;
                include        /etc/nginx/fastcgi_params;
            }
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        server {
            listen       443;
            server_name  site_name1;
    ##
            ssl                  on;
            ssl_certificate      cert.crt;
            ssl_certificate_key  cert.key;
            ssl_session_timeout  5m;
    #
            ssl_protocols  SSLv2 SSLv3 TLSv1;
            ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
            ssl_prefer_server_ciphers   on;
    #
    fastcgi_intercept_errors on;
    
            access_log  /var/log/nginx/site_name1.access.log;
    
            location / {
                root   /var/www;
                index  index.html index.htm index_x.php index.php;
            }
    
    
            location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/$fastcgi_script_name;
                include        /etc/nginx/fastcgi_params;
            }
    
    
        }
    	
    	    server {
            listen       443;
            server_name  site_name2;
    ##
            ssl                  on;
            ssl_certificate      cert.crt;
            ssl_certificate_key  cert.key;
            ssl_session_timeout  5m;
    #
            ssl_protocols  SSLv2 SSLv3 TLSv1;
            ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
            ssl_prefer_server_ciphers   on;
    #
    fastcgi_intercept_errors on;
    
            access_log  /var/log/nginx/site_name2.access.log;
    
            location / {
                root   /var/www/site_name2;
                index  index.html index.htm index_x.php index.php;
            }
    
    
            location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/site_name2/$fastcgi_script_name;
                include        /etc/nginx/fastcgi_params;
            }
    
    
        }
    }
    
    Щас в принципе почти всё работает, но в одном случае при запросе http://site_name2 редиректит на https://site_name2/site_name2

    При запросе http://site_name2/бла-бла-бла любое - работает всё верно, т.е. выходим на http://site_name2/redir.php и там уже на пыхе редирект на https. Подскажите где косяк?

    И второй вопрос: возможно ли сделать так чтоб вирт-хотсты на nginx работали по https с разными сертификатами и ключами?
     
    #1021 -=lebed=-, 31 Mar 2010
    Last edited: 31 Mar 2010
  2. #Wolf#

    #Wolf# Elder - Старейшина

    Joined:
    26 Mar 2008
    Messages:
    375
    Likes Received:
    166
    Reputations:
    16
    у меня еще полно selecto'ov
     
  3. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    Wolf
    PHP:
    <?php
    $text
    ='

    <select name="select">
      <option value="dfcgh">dft</option>
      <option value="fgb">dfghb</option>
      <option value="fgh">f</option>
    </select>


       1.
          <select name="cid" onChange="checkRubr(this.value,\'sel2\');"><option value="10">гостинки
       2.
          <option value="11">1-комн. кв.
       3.
          <option value="12">2-комн. кв.
       4.
          <option value="13">3-комн. кв.
       5.
          <option value="14">4-комн. кв.
       6.
          <option value="15">5-комн. кв.
       7.
          <option value="16">6-комн. кв.
       8.
          <option value="20">дома, коттеджи, дачи
       9.
          <option value="25">за рубежом
      10.
          <option value="30">земельные участки
      11.
          <option value="40">коммунальные квартиры
      12.
           
      13.
          <option value="50">подселение
      14.
          <option value="60">помещения
      15.
          <option value="0">прочее
      16.
          </select><br><br>


    <select name="select">
      <option value="dfcgh">dft</option>
      <option value="fgb">dfghb</option>
      <option value="fgh">f</option>
    </select>


    <select name="select">
      <option value="dfcgh">dft</option>
      <option value="fgb">dfghb</option>
      <option value="fgh">f</option>
    </select>


    '
    ;

    $m explode('select'$text);
    foreach(
    $m as $v) if(strstr($v'name="cid"')) $text $v;
    preg_match_all('/<option value="(.+)">.+\r\n/',$text$a);
    print_r($a); 



    ?>
     
  4. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    парсинг даных

    Парни появился еще вопрос по perl
    авторизировался на сайте но нужно спарсить некоторые данные Например как в вк друзей и рейтинг. что то не как не пойму как ето сделать. подскажите пожалуста
    вот блок с которого нужно спарсить
    красным пометил даные которые нужно спарсить. уже пол дня пробую и нефига(
     
    #1024 mazaxaka, 8 Apr 2010
    Last edited: 8 Apr 2010
  5. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    $text =~ /<div id="moneyInfo">.*?<span><\/span>(\d+\.)<small>(\d+)<\/small>.*?<\/div>/smi;
    my $first = $1 . $2;
    print $first, "\n";
    my ($second) = $text =~ /<span id="votesInfoCount">(\d+)<\/span>/;
    print $second, "\n";
    
    0.04
    0
    
     
    1 person likes this.
  6. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    еще 1 вопросик по парсингу
    пробывал как показала товарищ krypt3r
    но тут так не получается
    попробовал вот так. но не получается
     
  7. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    PHP:
    preg_match('/<div><h2>Друзья <span>\((.*)\)<\/span><\/h2><\/div>/'$result$res);
    я так понял,что тебе нужно подсчитать кол-во друзей вк
    я уже написал )
     
  8. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    я думаю ему на перле надо
    =~ /Друзья <span>\((.*)\)<\/span>/;
    будьте проще
     
    #1028 Vlad&slav, 8 Apr 2010
    Last edited: 8 Apr 2010
  9. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    благодарю.
    да именно на перле..
    хм.. почему то постоянно оишбка при попытке сохранить или показать значение ошибка
     
    #1029 mazaxaka, 9 Apr 2010
    Last edited: 9 Apr 2010
  10. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    <a\s+href="http:\/\/.+?\/friends\/">Друзья\s*\((\d+)\)<\/a>
    
     
  11. Seravin

    Seravin Active Member

    Joined:
    25 Nov 2009
    Messages:
    475
    Likes Received:
    190
    Reputations:
    221
    Я никогда не работал с mod_rewrite, поэтому не могу понять одну хрень:
    Code:
    RewriteEngine on
    Options +FollowSymLinks
    RewriteRule ^id/(.*)$ /product.php?id=$1
    
    мне нужна вот такая вещь, всё конечно работает, но ссылки у меня на странице вида
    Code:
    <a href="link.php"></a>
    
    и оно преобразовывает их к
    Code:
    <a href="http://hostname.ru/id/link.php"></a>
    
    а нужно
    Code:
    <a href="http://hostname.ru/link.php"></a>
    
     
  12. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    мой код
    вылазят ошибки
     
  13. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    ~ |<a\s+href="http:\/\/.+?\/friends\/">Друзья\s*\((\d+)\)<\/a>|;
     
    1 person likes this.
  14. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    мой код
    ошибки
    syntax error at , near "=~|"
    unrecognized character \xC4 in column 61 at 61 ето между > и Друзья
     
  15. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Кодировку получаемой страницы проверьте
     
  16. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    кодировка как и везде. (вроде) как точно проверить так и не понял
     
  17. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    открой код страницы там будет в самом начале
     
  18. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    windows-1251 кодировка там
     
  19. xNPC

    xNPC New Member

    Joined:
    12 Mar 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Есть что то типа
    elseif((!preg_match("!^[a-z1-9@\\*\\)\\(\\?\\!\\-_\\]\\[=~]+$!i",$user))) {вывод о не верном вводе}
    Надо из этого как то получить что бы юзер мог быть и русскими символами и латинскими, но только что бы либо то либо другое, что бы нельзя было мешать букВаВки.
    поДмогите кто чем может, уже хз скок сижу над этим
     
  20. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    xNPC
    PHP:
    if(preg_match('/[a-z]|[а-я]/i',$open))
     
Thread Status:
Not open for further replies.