Regla htaccess

Kaos

Buenas! Tengo una pequeña duda, a ver si alguien sería tan amable de ayudarme :)

Quiero hacer unas redirecciones 301.

La ruta antigua es:
http://www.trucoswindows.net/article[ID_DE_LA_NOTICIA].html

La ruta destino es:
http://www.trucoswindows.net/?p=[ID_DE_LA_NOTICIA]

Hay unas 1.000 noticias con lo que me gustaría crear una regla genérica de 301 que pase de una ruta a otra cambiando [ID_DE_LA_NOTICIA] por la Id en cuestión...

Gracias de antemano!

EnZo

Prueba esto:

RewriteRule ^article([0-9]+)\.html$ ?p=$1
1 1 respuesta
PiradoIV

Y si te falla por lo que sea lo que te puso EnZo, al .htaccess le falta alguna cosilla:

Options +FollowSymLinks

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^article([0-9]+)\.html$ ?p=$1
</IfModule>
1 1 respuesta
Kaos

Gracias! Me ha servido :D

Kaos

#3 y #2 puedo abusar un poco más de vuestros conocimientos?

Últimamente estoy programando con el framework Silex. Una de las ventajas que tiene es que lleva todas las rutas de htaccess desde un index.php. Así que todo va a parar a ese index.php.

El htaccess queda así:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ src/index.php [L]
</IfModule>

El problema es que quiero meter un blog de noticias en Wordpress. Que va a ir en /noticias

La putada que me encuentro es que cuando entro en /noticias (que debería abrir /noticias/index.php) o cualquier ruta dentro de noticias (por ejemplo: /noticias/titulo-de-noticia-de-ejemplo) pues también se va para el index.php.

Me imagino que la culpa de todo esto lo tiene RewriteRule ^ src/index.php [L] por los mini-manuales que he podido leer y entender. ^ coge todo lo que metas supongo y lo lleva a index.

Mi pregunta es, habría opción de que esto no afectara a un directorio que yo elija? Tanto el directorio como todo lo que se publique dentro...

Muchas gracias y perdón por el abuso que me estoy pegando xD

2 respuestas
mal3kith

#5 Haz un:

RewriteRule ^noticias - [L]

Antes del del index, con eso debería ignorarte el directorio noticias

eXtreM3

Me parece que hay una regla para denegar directorios, me pareció vérselo a alguien aquí. Tengo mucha prisa y no puedo ayudarte más.

PiradoIV

RewriteCond %{REQUEST_FILENAME} !-d

#5 Con el !-d le dices también que si el directorio no existe, siga con el rewrite, tal y como haces con el !-f para los ficheros que no existen (que alguien me corrija si me equivoco)

1 respuesta
Kaos

#8 la línea que has puesto debería rularme? Disculpad pero no he entendido demasiado bien lo que queréis decir. No se trata de obviar un directorio si no de que tenga sus propias reglas.

1 respuesta
PiradoIV

#9 la linea debería hacer que, si un directorio existe físicamente, no le aplique la redirección al index.php... dentro del directorio puedes crear otro .htaccess y preparar otras reglas para lo que tenga dentro.

#11 correeeeto =)

2 respuestas
Kaos

#10 Gracias! Ya rula. Quedaría tal que así:

Options +FollowSymlinks
RewriteEngine On

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/x-javascript text/css text/html text/xml
</IfModule>

Header unset ETag
FileETag None

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
1 respuesta
Kaos

#10 Pirado y si el index.php lo tienes en una carpeta? Hay algunos casos en los que el directorio raiz está vacío, con la regla que me habéis dicho !-d coge la ruta principal como directorio.

Por ejemplo:

RewriteCond %{REQUEST_FILENAME} !-f	
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ src/index.php [L]

Con estas reglas, al ir a / me encuentro con:
http://screencast.com/t/gQMzgRcW

1 respuesta
PiradoIV

#12 apuf, ahí ya me pillas, mira a ver si está mal la RewriteRule, prueba esta:

RewriteRule ^(.*)$ src/index.php [L]

Si no, prueba a especificarle el RewriteBase, bajo el RewriteEngine On, por ejemplo:

RewriteBase http://www.tudominiomagico.com/
2 respuestas
Kaos

#13 xDD se complica el tema. He probado lo que comentas pero ninguna de las dos cosas funciona... qué putada!

1 respuesta
EnZo

#14 Me he perdido un poco con este post xD, y no se exactamente que quieres hacer. Podrias poner un caso practico de lo que quieres hacer?

1 respuesta
Kaos

#15 Fácil de resumir.

Teniendo esto:

<IfModule mod_rewrite.c>
        Options -MultiViews
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^ src/index.php [L]
    </IfModule>

Necesito que cuando accedas a / no obtenga este error http://screencast.com/t/gQMzgRcW

1 respuesta
EnZo

#16 "Necesito que cuando accedas a / no obtenga este error http://screencast.com/t/gQMzgRcW" en vez de eso que deberia de hacer? La ultima linea juraria que está mal formada.

La abres "" pero no la cierras "$". Quieres que te envie a " src/index.php" cuando se cumpla el que?

1 respuesta
Kaos

#17 Cuando se cumpla que accedes al root del dominio "/", vamos, cuando no escribes nada y pones el dominio a pelo.

1 respuesta
EnZo

#18
Si es a pelo eso:

RewriteRule ^/?$ src/index.php

Pero con esta regla cuando ponga www.dominio.com/otracarpeta/index.php irá correctamente a otracarpeta.

Si quieres evitar eso entonces:

RewriteRule ^.*$ src/index.php

PD: Los condicionales no te hacen falta.

2 respuestas
Kaos

#19 Creo que funciona!
Muchas gracias a todos!

Menuda liada ...

22 días después
Kaos

#19 y #13 finalmente ya la he publicado: www.maquillajenovia.com
El archivo me ha quedado así. ¿Lo véis bien?

RewriteEngine On
Options -MultiViews
Options +FollowSymlinks

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
</IfModule>

Header unset ETag
FileETag None

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ src/index.php [L]
RewriteRule ^/?$ src/index.php [L]

Me gustaría también añadir una regla que me pase todo lo que no venga con www. a www. para que cuando escribas el dominio sin las w redireccione a www. No sé si habréis visto algo así...

¡Gracias por todo cracks!

2 respuestas
BLZKZ

#21 no me gusta que a 1920x1080 se vea todo en la mitad izquierda sinceramente XD me parece una cagadilla.

Lo demás perfect

LOc0
de_postre

Salu2 ;)

2 respuestas
Kaos

#23 Lo malo de esas reglas es que si pongo maquillajenovia.com sin las www. me lleva a http://www.maquillajenovia.com/src/index.php

LOc0

Me gustaría también añadir una regla que me pase todo lo que no venga con www. a www. para que cuando escribas el dominio sin las w redireccione a www. No sé si habréis visto algo así...

Explícate mejor ;)

salu2 ;)

1 respuesta
Kaos

maquillajenovia.com -> www.maquillajenovia.com
maquillajenovia.com/procedimiento -> www.maquillajenovia.com/procedimiento

Algo así :P
Gracias de todas formas!

Kaos

#25 Ahora es perfecto! Muchas gracias!!!! Sobre todo porque voy a usar el mismo htaccess en bastantes proyectos que tengo en desarrollo

PiradoIV

#21 Con esto te debería tirar:

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

Plan B:

RewriteCond %{HTTP_HOST} !^www\.maquillajenovia\.com
RewriteRule (.*) http://www.maquillajenovia.com/$1 [R=301,L]

Vienen siendo similares, según el caso concreto.

PiradoIV

Oops, no había visto #23 xDDD

Usuarios habituales

  • PiradoIV
  • Kaos
  • LOc0
  • BLZKZ
  • EnZo
  • eXtreM3
  • mal3kith