mod-rewrite para eliminar el subdirectorio en .htaccess

¿Cómo reescribiría una URL como:

http://www.site.com/sub-directory/page-name

a

http://www.site.com/page-name

?

preguntado el 04 de julio de 12 a las 06:07

la respuesta depende de si quieres cada "subdirección" para ser eliminado o solo cuando el archivo existe -

Sí, me gustaría eliminar cada primer subdirectorio. Por ejemplo, si la ruta actual es site.com/sub-directory/sub-sub-directory/page-name Me gustaría site.com/sub-sub-directorio/nombre-de-la-pagina -

is sub-directory un directorio estático? Si no, ¿cómo lidiarías con los conflictos de nombres? -

Mi problema es que estoy ejecutando 3 sitios diferentes desde el mismo CMS. Tengo cada uno de los sitios cargando bien desde sus nombres de dominio, sin embargo, cada una de las páginas de los sitios se muestra en domain.com/site-name/page-name. Solo necesito eliminar el nombre del sitio:

2 Respuestas

Creo que su solución prevista es usar Hosts virtuales, pero si no tiene acceso a httpd.conf, puede probar las siguientes reglas de reescritura:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} =host1.example.com
RewriteCond %{REQUEST_URI} !^/host1-dir
RewriteRule ^(.*) host1-dir/$1 [L]

RewriteCond %{HTTP_HOST} =host2.example.com
RewriteCond %{REQUEST_URI} !^/host2-dir
RewriteRule ^(.*) host2-dir/$1 [L]

RewriteCond %{HTTP_HOST} =host3.example.com
RewriteCond %{REQUEST_URI} !^/host3-dir
RewriteRule ^(.*) host3-dir/$1 [L]

# If doesn't match any of it then 404 Not Found or anything you like
RewriteCond %{HTTP_HOST} =host1.example.com
RewriteCond %{HTTP_HOST} =host2.example.com
RewriteCond %{HTTP_HOST} =host3.example.com
RewriteRule .* - [R=404,L]

Respondido 04 Jul 12, 07:07

IIRC mod_rewrite admite expresiones regulares, por lo que puede usar su reemplazo:

^(.*/)[^/]*& 

Los padres coinciden todos hasta el último /.

Luego lo reutiliza usando la referencia de grupo, creo que es $1. El resto se deja caer.

Consulte la ayuda de mod_rewrite sobre cómo usar expresiones regulares.

Respondido 04 Jul 12, 06:07

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