versiones guia espaƱol descargar actualizar php apache mod-rewrite

php - guia - qgis manual



mod_rewrite VS caminos relativos (5)

Agrega una <base href="yoururl.com/beta/"; /> <base href="yoururl.com/beta/"; /> etiqueta a su cabeza de HTML. También agregue RewriteBase / beta / al htaccess si está en esa subcarpeta

Mi código mod_rewrite es:

Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)?$ index.php?url=$1 [L,NC]

Esta estructura se coloca en mi ruta del servidor /beta

Cuando coloco la URL http://mydomain.com/beta/download todo funciona reescribiendo en la ruta real http://mydomain.com/beta/index.php?url=download

El problema ocurre con las rutas relativas. Cuando ingreso la URL http://mydomain.com/beta/download/box la reescritura va a http://mydomain.com/beta/index.php?url=download/box ... pero ...

Todas mis rutas relativas, como mi carpeta css, mi carpeta js, archivos de imagen ... todo lo relacionado con la ruta relativa en mi página index.php falla, porque mis rutas relativas se convierten en download/css , download/js , download/images ... .etc ...

Sé que este problema ocurre en razón de la barra en la ruta "descargar /", pero ¿cómo puedo resolver eso usando mod_rewrite en .htaccess?

¿Puedo evitar volver a escribir en rutas relativas? ¿O incluso en rutas internas de mi propio dominio?

¿Cómo puedo resolver eso SIN cambiar mis caminos relativos a caminos absolutos?

Gracias


El servidor no sabrá nunca si la solicitud proviene de una ruta relativa o absoluta, por lo que no hay nada que pueda hacer al respecto. Como se indica en otra respuesta, podría hacer excepciones, pero mantener todas ellas, etc. se convertirá en PITA en algún momento. ;)

Siempre uso rutas absolutas, especialmente cuando reescribo, así que sugiero solo eso, es la manera más fácil


siempre debe usar rutas absolutas para imágenes css, etc., cuando juegue con mod_rewrite, pero una solución simple podría ser ignorar css, js, images y rest en RewriteRule ^(.+)?$ index.php?url=$1 [L,NC]

RewriteRule ((js|css|images)//.*)$ /$1 [L,NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)?$ index.php?url=$1 [L,NC]

sin embargo, esto puede no funcionar si estos directorios realmente dependen de la URL actual


Agregar la línea:

<BASE href="http://www.sitename.com/">

para mi página dentro de la etiqueta <head> funciona muy bien para mí. Se puede codificar incluso una función de PHP para automatizar esto para que no tenga que molestarse con copiar / pegar en otras ocasiones.

Actualizar:

<?php $BaseDir = ''http://''.$_SERVER[''SERVER_NAME''].substr($_SERVER["SCRIPT_NAME"], 0, strrpos($_SERVER["SCRIPT_NAME"],"/")+1); ?> <head> ... <BASE href="<?php echo $BaseDir; ?>"> ... </head>


Probé la etiqueta y no es necesario indicar http: // El siguiente código funcionó para mí:

<base href="<?php echo dirname($_SERVER[''PHP_SELF'']);?>/" />