.htaccess reescribir en subcarpeta con codeigniter rewrite

Tengo un sitio que debe existir en una subcarpeta

example.com/site

Pero estoy tratando de usar .htaccess para eliminar cualquier enlace que contenga www (para asegurarme de que codeigniter csrf no arroje errores), así que agregué

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

Esto funciona bien cuando se especifica un identificador de página, por lo que

www.example.com/site/book rewrites to example.com/site/book

Pero cuando no hay un identificador de página especificado, obtengo un 404

www.example.com/site rewrites to example.com/site//usr/local/pem/vhosts/103480/webspace/httpdocs/new

Me preguntaba si alguien podría señalarme en la dirección correcta.

Este es mi .htaccess completo

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.example\.com)?$
RewriteRule ^(.*)$ http://example.com/site/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

preguntado el 23 de abril de 13 a las 13:04

¿Tiene un archivo htaccess adicional en el site ¿subdirectorio? -

Sí, el .htaccess en cuestión está en el site subdirectorio, lo siento, debería haber sido más claro. Sin embargo, la respuesta actualizada de faa ha resuelto mi problema:

2 Respuestas

Puede intentar esto en su lugar:

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

Respondido 23 Abr '13, 16:04

Gracias por tu respuesta. Lo que ha sugerido no incluye la redirección a la subcarpeta, y cuando lo vuelvo a agregar RewriteRule ^(.*) http://example.com/site/$1 [R=301,L] se reescribe en la misma URL que se menciona en la pregunta al intentar acceder www.example.com/site - jasonm

El código en mi respuesta elimina www de la solicitud. Eso es todo. Ahora, ¿quieres redirigir todo al directorio? /site? Si es así, primero debe asegurarse de que la solicitud no sea para /site. Puedo actualizar mi respuesta si explica más en detalle lo que quiere. - Felipe Alameda A.

Quiero redirigir la solicitud como: www.ejemplo.com/sitio => ejemplo.com/sitio y www.ejemplo.com/sitio/libro => ejemplo.com/sitio/libro Lo que tengo funciona para el segundo caso, pero no para el primero - jasonm

Bueno, eso es exactamente lo que hace el código en mi respuesta. Solo quita el www y mantiene la ruta URI según lo solicitado. No tienes que añadir nada. Reemplace las 2 líneas superiores en su pregunta con las de mi respuesta. - Felipe Alameda A.

¡Eso es todo! Gracias de nuevo por su tiempo (¡y paciencia!) - jasonm

Tal vez, solo te falta un RewriteBase

Dependiendo de donde .htaccess el archivo es, intente cualquiera

RewriteBase /

or

RewriteBase /site

Nunca prueba con 301 habilitado, vea esta respuesta Consejos para depurar las reglas de reescritura de .htaccess para más detalles.

contestado el 23 de mayo de 17 a las 12:05

Gracias por el enlace olaf, será una buena lectura para mí para tratar de mejorar en esta área. jasonm

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.