Foros del Web » Administración de Sistemas » Apache »

ayuda con sentencia rewriteCond y rewriteRule

Estas en el tema de ayuda con sentencia rewriteCond y rewriteRule en el foro de Apache en Foros del Web. Hola, tengo esta sentencia en el .htaccess, yo no la hice: RewriteCond %{QUERY_STRING} ^board=([0-9]*).([0-9]*) RewriteRule ^(.*)$ seo4smf-redirect.php?b=%1 [R=301,L] lo que no entiendo es esto: b=%1 ...
  #1 (permalink)  
Antiguo 27/02/2010, 22:47
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 18 años
Puntos: 2
ayuda con sentencia rewriteCond y rewriteRule

Hola, tengo esta sentencia en el .htaccess, yo no la hice:

RewriteCond %{QUERY_STRING} ^board=([0-9]*).([0-9]*)

RewriteRule ^(.*)$ seo4smf-redirect.php?b=%1 [R=301,L]

lo que no entiendo es esto: b=%1, pense que para capturar parametros se usaba el $1 , por eso me confundo, tambien exactamente ese %1 que es lo que captura, esto (.*) o uno de estos ([0-9]*), si pudieran ayudarme se los agradeceria porque ya he buscado varios manuales en internet pero ninguno me explica en detalle mi duda.
Salu2.
  #2 (permalink)  
Antiguo 28/02/2010, 01:26
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

Si no me equivoco ya que poco lo he usado, el $ captura datos del rewriterule y el % del rewritecond, es decir en este caso está capturando el primer ([0-9]*)
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #3 (permalink)  
Antiguo 28/02/2010, 12:39
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 18 años
Puntos: 2
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

Cita:
Iniciado por ferny Ver Mensaje
Si no me equivoco ya que poco lo he usado, el $ captura datos del rewriterule y el % del rewritecond, es decir en este caso está capturando el primer ([0-9]*)
ayaaaaa, eso no lo sabia, muchas gracias, pero entonces para que sirve poner esto ^(.*)$ en el RewriteRule?
  #4 (permalink)  
Antiguo 28/02/2010, 12:47
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

El ^ significa "inicio"

El $ significa "fin"

El (.*) significa "cualquier caracter"

En definitiva, eso significa "cualquier caracter entre el inicio y el fin"
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #5 (permalink)  
Antiguo 28/02/2010, 13:46
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 18 años
Puntos: 2
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

ok, muchas gracias por las respuestas, ahora como ya no tengo dudas ahora pongo esta sentencia:

RewriteCond %{QUERY_STRING} ^board=([0-9]*).([0-9]*);genero=([0-9]*)

RewriteRule ^(.*)$ seo4smf-redirect.php?b=%1;g=%3 [R=301,L]

cuando pongo eso en mi htaccess, en la web me sale error 500,
y no se cual es el error,o en el rewriterule lo hago asi:

RewriteRule ^(.*)$ seo4smf-redirect.php?b=%1&g=%3 [R=301,L]

osea para concatenar la variables uso el & en vez del ; pero igual no funciona :(
  #6 (permalink)  
Antiguo 28/02/2010, 14:32
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

El error 500 suele ser por sintaxis incorrecta o porque el mod rewrite no está activado. Asumo que el mod rewrite sí lo tendrás activado, ¿lo has comprobado?

La sintaxis no parece incorrecta, además esas dos líneas puestas en mi servidor no dan error, así que puede que tengas el .htaccess incompleto. Copia y pega aquí todo lo que tienes puesto...
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #7 (permalink)  
Antiguo 28/02/2010, 14:36
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 18 años
Puntos: 2
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

este es mi htaccess:
RewriteEngine on


#RewriteCond %{HTTP_HOST} ^ax-anime.com [NC]
#RewriteRule ^(.*)$ http://www.ax-anime.com/$1 [L,R=301]

#Some apache servers need Rewritebase.

#delete # from start of Rewrite base to enable it.

#If your forum is something like http://www.forum-example.com/forum then modify your

#RewriteBase in this way: RewriteBase /forum



RewriteBase /



#Archive/Sitemaps

RewriteRule ^sitemaps-([a-zA-Z0-9-]*)\.html index.php?dummy=1&action=seo4smfsitemaps&sa=$1 [L]



#uncomment if you use beautifying url actions

#RewriteCond %{REQUEST_METHOD} =GET

#RewriteCond %{QUERY_STRING} ^action=(.*)$

#RewriteRule ^(.*)$ seo4smf-redirect.php?a=%1 [R=301,L]



RewriteCond %{QUERY_STRING} ^topic=([0-9]*)$

RewriteRule ^(.*)$ seo4smf-redirect.php?t=%1 [R=301,L]



RewriteCond %{QUERY_STRING} ^topic=([0-9]*).([0-9]*)

RewriteRule ^(.*)$ seo4smf-redirect.php?t=%1 [R=301,L]



RewriteCond %{QUERY_STRING} ^board=([0-9]*).([0-9]*)

RewriteRule ^(.*)$ seo4smf-redirect.php?b=%1 [R=301,L]


#genero
#RewriteCond %{QUERY_STRING} ^board=([0-9]*).([0-9]*);genero=([0-9]*)

#RewriteRule ^(.*)$ seo4smf-redirect.php?b=%1;g=%3 [R=301,L]
#genero
##lo he tenido que comentar sino siguen dando el error

RewriteCond %{QUERY_STRING} ^action=profile;u=([0-9]*);(.*)$

RewriteRule ^(.*)$ seo4smf-redirect.php?u=%1;param=%2 [R=301,L]



RewriteCond %{QUERY_STRING} ^action=profile;u=([0-9]*)

RewriteRule ^(.*)$ seo4smf-redirect.php?u=%1 [R=301,L]



#Tiny Portal Old Url's

RewriteCond %{QUERY_STRING} ^page=([0-9]*)

RewriteRule ^(.*)$ seo4smf-redirect.php?p=%1 [R=301,L]



#Rewrite Old urls

RewriteRule ^index.php/board,(.*).html seo4smf-redirect.php?b=$1 [R=301,L]

RewriteRule ^index.php/board,(.*).html;(.*) seo4smf-redirect.php?b=$1&o=$2 [R=301,L]



RewriteRule ^index.php/topic,(.*).html seo4smf-redirect.php?t=$1 [R=301,L]

RewriteRule ^index.php/topic,(.*).html;(.*) seo4smf-redirect.php?t=$1&o=$2 [R=301,L]



#Bad Url's

#RewriteCond %{REQUEST_URI} ^(.*)\.html$

#RewriteCond %{REQUEST_URI} !^(.+)/(.*)-t([0-9]*)\.([0-9]*).html$

#RewriteRule ^(.*)-t([0-9]*)\.([0-9]*)\.html seo4smf-redirect.php?t=$2 [R=301,L]



RewriteRule ^(.*)/-t(.*).html seo4smf-redirect.php?t=$2 [R=301,L]

RewriteRule ^-b(.*)/$ seo4smf-redirect.php?b=$1 [R=301,L]

RewriteRule ^-b(.*)/(.*)$ seo4smf-redirect.php?b=$1 [R=301,L]

RewriteRule ^(.*)/-b(.*)/$ seo4smf-redirect.php?b=$2 [R=301,L]



#New board URL's

RewriteRule ^(.*)-b([0-9]*)\.([0-9]*)/;(.*) index.php?dummy=1&board=$2.$3&$4 [L]

RewriteRule ^(.*)-b([0-9]*)\.([0-9]*)/$ index.php?dummy=2&board=$2.$3 [L]

RewriteRule ^(.*)-b([0-9]*)\.([0-9])$ index.php?dummy=2&board=$2.$3 [L]



#New topic URL's

RewriteRule ^(.*)-t([0-9]*)\.([0-9]*)\.html;((\?:from|msg|new)[0-9]*);(.*)$ index.php?dummy=1&topic=$2.$4&$6 [L]

RewriteRule ^(.*)-t([0-9]*)\.([0-9]*)\.html;((\?:from|msg|new)[0-9]*) index.php?dummy=1&topic=$2.$4 [L]

RewriteRule ^(.*)-t([0-9]*)\.([0-9]*)\.html;(.*)$ index.php?dummy=1&topic=$2.$3&$4 [L]

RewriteRule ^(.*)-t([0-9]*)\.([0-9]*)\.html$ index.php?dummy=1&topic=$2.$3 [L]



#New profiles URL's

RewriteRule ^(.*)-u([0-9]*)\.html;sa,(.*);start,([0-9]*);delete,([0-9]*);sesc,([a-z0-9]*)$ index.php?dummy=1&action=profile;u=$2;sa=$3;start= $4;delete=$5;sesc=$6 [L]

RewriteRule ^(.*)-u([0-9]*)\.html;sa,(.*);start,([0-9]*)$ index.php?dummy=1&action=profile;u=$2;sa=$3;start= $4 [L]

RewriteRule ^(.*)-u([0-9]*)\.html;sa,(.*)$ index.php?dummy=1&action=profile;u=$2;sa=$3 [L]

RewriteRule ^(.*)-u([0-9]*)\.html index.php?dummy=1&action=profile;u=$2 [L]



#New Tinyportal Articles URL's

RewriteRule ^(.*)-p([0-9]*)\.html index.php?dummy=1&page=$2 [L]



#New action Url's - uncomment if you use beautifying url actions

#RewriteRule ^(.*)\.html(.*)$ index.php?dummy=1;action=$1;$2 [L]

#RewriteRule ^(.*)\.html$ index.php?dummy=1;action=$1 [L]



#Sitemaps

RewriteRule sitemap.xml sitemaps.php [L]

RewriteRule urllist.txt urllist.php [L]
  #8 (permalink)  
Antiguo 28/02/2010, 14:52
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

Efectivamente da el error 500, pero en otra sección. En la parte #New profiles URL's, en las dos primeras reglas delante del $4 hay un espacio. Lo he eliminado y ya no da error 500. Por supuesto que descomentando esas dos líneas que mencionabas, tampoco da error...
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #9 (permalink)  
Antiguo 28/02/2010, 18:58
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 18 años
Puntos: 2
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

Cita:
Iniciado por ferny Ver Mensaje
Efectivamente da el error 500, pero en otra sección. En la parte #New profiles URL's, en las dos primeras reglas delante del $4 hay un espacio. Lo he eliminado y ya no da error 500. Por supuesto que descomentando esas dos líneas que mencionabas, tampoco da error...
pues eso ya lo corregi pero nada :(

lo raro es que cuando comento esta linea:

RewriteRule ^(.*)$ seo4smf-redirect.php?b=%1&g=%3 [R=301,L]

ya no sale el error, pero lo veo bien :(

por siacaso tambien pongo el archivo seo4smf-redirect.php


Código PHP:
Ver original
  1. <?php
  2.     require_once('SSI.php');
  3.  
  4.     if (!defined('SMF'))
  5.         die('I can\'t find SMF installed !');
  6.  
  7.     $topic = $_GET['t'];
  8.     $board = $_GET['b'];
  9.     $other = $_GET['o'];
  10.     $user = $_GET['u'];
  11.     $tpage = $_GET['p'];
  12.     $action = $_GET['a'];
  13.     $param = $_GET['param'];
  14.     $genero = $_GET['g'];
  15.  
  16.  
  17.     if (isset($modSettings['seo4smf_split_char']))
  18.         $split_char = $modSettings['seo4smf_split_char'];
  19.     else
  20.         $split_char = "_";
  21.  
  22.     if (empty($topic) && empty($board) && empty($user) && empty($tpage) && empty($action))
  23.     {
  24.         die ('No parameter given !');
  25.     }
  26.     else
  27.     {
  28.  
  29.         if (strpos($topic, '/') !== false) //until now only VisualWarning is adding /
  30.         {
  31.             list($topic, $other) = explode("/", $topic);
  32.         }
  33.  
  34.         list($topic, $trest) = explode('.', $topic);
  35.         list($board, $brest) = explode('.', $board);
  36.  
  37.         if (!empty($action))
  38.         {
  39.  
  40.             $scripturl1 = str_replace('/index.php', '', $scripturl);
  41.  
  42.             $params = $_SERVER['QUERY_STRING'];
  43.             $sizep = strlen($params);
  44.             $pos = strpos($params, ";");
  45.             if ($pos > 0)
  46.             {
  47.                 $params = substr($params, $pos+1, $sizep);
  48.             }
  49.             if ($params == "")
  50.                 $uri = $action.".html";
  51.             else
  52.                 $uri = $action.".html;".$params;
  53.  
  54.             $url = $scripturl1.'/'.$uri;
  55.  
  56.         }
  57.  
  58.         if (!empty($topic))
  59.         {
  60.             $query = db_query("
  61.                 SELECT m.ID_TOPIC, m.subject ,b.ID_BOARD, b.name
  62.                 FROM {$db_prefix}messages AS m, {$db_prefix}boards AS b
  63.                 WHERE m.ID_TOPIC = $topic
  64.                 AND m.ID_BOARD = b.ID_BOARD
  65.                 LIMIT 1", __FILE__, __LINE__);
  66.             $row = mysql_fetch_assoc($query);
  67.             mysql_free_result($query);
  68.  
  69.             $topic_name = remove_signs($row['subject']);
  70.             $topic_name = strtolower(str_replace(" ", $split_char, $topic_name));
  71.  
  72.             $board_name = remove_signs($row['name']);
  73.             $board_name = strtolower(str_replace(" ", $split_char, $board_name));
  74.  
  75.         if (empty($topic_name)) $topic_name="empty";
  76.  
  77.             if (!empty($other))
  78.             {
  79.                 if (is_numeric($trest))
  80.                     $uri = ($modSettings['seo4smf_topic_board'] != 'on'?"$board_name/":'').$topic_name.'-t'.$topic.'.'.$trest.'.html;'.$other;
  81.                 else
  82.                     if (!empty($trest))
  83.                     $uri = ($modSettings['seo4smf_topic_board'] != 'on'?"$board_name/":'').$topic_name.'-t'.$topic.'.0.html;'.$trest.';'.$other;
  84.                 else
  85.                     $uri = ($modSettings['seo4smf_topic_board'] != 'on'?"$board_name/":'').$topic_name.'-t'.$topic.'.0.html;'.$other;
  86.             }
  87.             else
  88.             {
  89.                 if (is_numeric($trest))
  90.                     $uri = ($modSettings['seo4smf_topic_board'] != 'on'?"$board_name/":'').$topic_name.'-t'.$topic.'.'.$trest.'.html';
  91.                 else
  92.                     {
  93.                     if (!empty($trest))
  94.                         $uri = ($modSettings['seo4smf_topic_board'] != 'on'?"$board_name/":'').$topic_name.'-t'.$topic.'.0.html;'.$trest;
  95.                     else
  96.                         $uri = ($modSettings['seo4smf_topic_board'] != 'on'?"$board_name/":'').$topic_name.'-t'.$topic.'.0.html';
  97.                 }
  98.  
  99.             }
  100.             $scripturl1 = str_replace('/index.php', '', $scripturl);
  101.  
  102.             $url = $scripturl1.'/'.$uri;
  103.  
  104.         }
  105.         if (!empty($board))
  106.         {
  107.             if (empty($genero)){
  108.  
  109.  
  110.             $query = db_query("
  111.                 SELECT name FROM {$db_prefix}boards AS b
  112.                 WHERE ID_BOARD = $board
  113.                 LIMIT 1", __FILE__, __LINE__);
  114.  
  115.             $row = mysql_fetch_assoc($query);
  116.             mysql_free_result($query);
  117.             $board_name = remove_signs($row['name']);
  118.             $board_name = strtolower(str_replace(" ", $split_char, $board_name));
  119.  
  120.             $uri = $board_name.'-b'.$board.'.0/';
  121.             $scripturl1 = str_replace("/index.php", "", $scripturl);
  122.  
  123.             $url = $scripturl1.'/'.$uri;
  124.  
  125.             }else{
  126.  
  127.  
  128.             $query2 = db_query("
  129.                 SELECT genero FROM {$db_prefix}generos AS g
  130.                 WHERE ID_GENERO = $genero
  131.                 LIMIT 1", __FILE__, __LINE__);
  132.  
  133.             $row2 = mysql_fetch_assoc($query2);
  134.             mysql_free_result($query2);
  135.             $genero_name = remove_signs($row2['genero']);
  136.             $genero_name = strtolower(str_replace(" ", $split_char, $genero_name));
  137.  
  138.             $uri = $board_name.'-b'.$board.'.0/genero/'.$genero_name.'/';
  139.             $scripturl1 = str_replace("/index.php", "", $scripturl);
  140.  
  141.             $url = $scripturl1.'/'.$uri;
  142.  
  143.  
  144.             }
  145.         }
  146.          /*
  147.          ////genero
  148.         if (!empty($board) && !empty($genero))
  149.         {
  150.             $query = db_query("
  151.                 SELECT name FROM {$db_prefix}boards AS b
  152.                 WHERE ID_BOARD = $board
  153.                 LIMIT 1", __FILE__, __LINE__);
  154.  
  155.             $row = mysql_fetch_assoc($query);
  156.             mysql_free_result($query);
  157.             $board_name = remove_signs($row['name']);
  158.             $board_name = strtolower(str_replace(" ", $split_char, $board_name));
  159.  
  160.  
  161.             $query2 = db_query("
  162.                 SELECT genero FROM {$db_prefix}generos AS g
  163.                 WHERE ID_GENERO = $genero
  164.                 LIMIT 1", __FILE__, __LINE__);
  165.  
  166.             $row2 = mysql_fetch_assoc($query2);
  167.             mysql_free_result($query2);
  168.             $genero_name = remove_signs($row2['genero']);
  169.             $genero_name = strtolower(str_replace(" ", $split_char, $genero_name));
  170.  
  171.             $uri = $board_name.'-b'.$board.'.0/genero/'.$genero_name.'/';
  172.             //$uri = $board_name.'-b'.$board.'.0/';
  173.             $scripturl1 = str_replace("/index.php", "", $scripturl);
  174.  
  175.             $url = $scripturl1.'/'.$uri;
  176.  
  177.         }
  178.         ////genero
  179.         */
  180.         if ((!empty($user)) && empty($action))
  181.         {
  182.  
  183.             $request = db_query("SELECT memberName FROM {$db_prefix}members where ID_MEMBER=".$user." limit 1", __FILE__, __LINE__);
  184.             $name = mysql_fetch_assoc($request);
  185.             mysql_free_result($request);
  186.  
  187.             $scripturl1 = str_replace("/index.php", "", $scripturl);
  188.  
  189.             $uri = "profiles/".$name['memberName']."-u".$user.".html";
  190.             if (!empty($param))
  191.             {
  192.                 $param = str_replace("=", ",", $param);
  193.                 $uri .= ";".$param;
  194.             }
  195.  
  196.             $url = $scripturl1.'/'.$uri;
  197.         }
  198.  
  199.         if (!empty($tpage))
  200.         {
  201.             $request = db_query("SELECT subject FROM {$db_prefix}tp_articles where id=".$tpage." limit 1", __FILE__, __LINE__);
  202.             $row = mysql_fetch_assoc($request);
  203.             mysql_free_result($request);
  204.  
  205.             $scripturl1 = str_replace("/index.php", "", $scripturl);
  206.  
  207.             $page_name = remove_signs($row['subject']);
  208.             $page_name = strtolower(str_replace(" ", $split_char, $page_name));
  209.  
  210.             $uri = $page_name."-p".$tpage.".html";
  211.             $url = $scripturl1.'/'.$uri;
  212.         }
  213.  
  214.     }
  215.  
  216.     if (!empty($url))
  217.     {
  218.         header('HTTP/1.1 301 Moved Permanently');
  219.         header('Location: '.$url);
  220.         exit;
  221.     }
  222.     else
  223.     {
  224.         echo 'Is something wrong here ... !';
  225.     }
  226.  
  227. ?>
  #10 (permalink)  
Antiguo 01/03/2010, 01:20
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
Respuesta: ayuda con sentencia rewriteCond y rewriteRule

Pues no se me ocurre nada más, es que lo veo bien A ver si alguien más puede darle un vistazo...
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.

Etiquetas: rewritecond, rewriterule, sentencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:59.