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'']);?>/" />