Hacer que XAMPP / Apache sirva el archivo fuera de htdocs [cerrado]

304

¿Es posible configurar xampp para servir un archivo fuera del htdocsdirectorio?

Por ejemplo, supongamos que tengo un archivo ubicado de la siguiente manera:

C:\projects\transitCalculator\trunk\TransitCalculator.php

y mis archivos xampp normalmente se sirven desde:

C:\xampp\htdocs\

(porque esa es la configuración predeterminada) ¿Hay alguna forma de hacer que Apache reconozca y sirva mi TransitCalculator.phparchivo sin moverlo htdocs? Preferiblemente me gustaría que Apache sirva / tenga acceso a todo el contenido del directorio de proyectos, y no quiero mover el directorio de proyectos debajo htdocs.

editar: editado para agregar Apache al título de la pregunta para hacer que las preguntas y respuestas sean más "buscables"

cmcculloh
fuente
1
Se supone que las etiquetas se pueden buscar lo suficiente, creo.
agua helada
24
Esta pregunta no debería haberse cerrado. Esta es una pregunta de XAMPP. Esta es una pregunta para desarrolladores.
Andrew Koper
15
Andrew Koper, estoy de acuerdo, pero no es sorprendente con el nivel de hostilidad endémica de mano dura en toda la ecosfera de intercambio de pila en este momento. ¯_ (ツ) _ / ¯
cmcculloh
Maby está fuera del tema, pero solo quiero dar una propina: a veces una opción es mover directorios en su carpeta "htdocs", por ejemplo. si desea poder abrir archivos en Google Drive en localhost;) ( stackoverflow.com/questions/41751330/… )
Gordova
2
Además de todas las respuestas, me gustaría agregar una. Desde PHP 5.4.0 en adelante, puede moverse a la raíz de su proyecto usando la línea de comando y ejecutar php -S <host>:<port>. Por ejemplo php -S localhost:80.
radiantshaw

Respuestas:

362

Ok, por las respuestas de pix0r , Sparks y Dave parece que hay tres formas de hacer esto:


Hosts virtuales

  1. Abra C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf.
  2. Descomente ~ línea 19 ( NameVirtualHost *:80).
  3. Agregue su host virtual (~ línea 36):

    <VirtualHost *:80>
        DocumentRoot C:\Projects\transitCalculator\trunk
        ServerName transitcalculator.localhost
        <Directory C:\Projects\transitCalculator\trunk>
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
  4. Abra su archivo de hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts).

  5. Añadir

    127.0.0.1 transitcalculator.localhost #transitCalculator

    hasta el final del archivo (antes del Spybot - Buscar y destruir cosas si lo tienes instalado).

  6. Guardar (es posible que tenga que guardarlo en el escritorio, cambiar los permisos en el archivo de hosts anterior (clic con el botón derecho> propiedades) y copiar el nuevo en el directorio sobre el anterior (o cambiar el nombre del anterior) si está utilizando Vista y tiene problemas).
  7. Reinicia Apache.

Ahora puede acceder a ese directorio navegando a http: //transitcalculator.localhost/ .


Hacer un alias

  1. A partir de la ~ línea 200 de su http.confarchivo, copie todo entre <Directory "C:/xampp/htdocs">y </Directory>(~ línea 232) y péguelo inmediatamente debajo con C:/xampp/htdocsreemplazado por su directorio deseado (en este caso C:/Projects) para darle a su servidor los permisos correctos para el nuevo directorio.

  2. Encuentre la <IfModule alias_module></IfModule>sección (~ línea 300) y agregue

    Alias /transitCalculator "C:/Projects/transitCalculator/trunk"

    (o lo que sea relevante para sus deseos) debajo del Aliasbloque de comentarios, dentro de las etiquetas del módulo.


Cambiar la raíz de tu documento

  1. Edite ~ línea 176 en C: \ xampp \ apache \ conf \ httpd.conf; cambia DocumentRoot "C:/xampp/htdocs"a #DocumentRoot "C:/Projects"(o lo que quieras).

  2. Edite ~ línea 203 para que coincida con su nueva ubicación (en este caso C:/Projects).


Notas:

  • Debe utilizar barras diagonales "/" en lugar de barras diagonales "\".
  • No incluya el "/" final al final.
  • reinicie su servidor .
cmcculloh
fuente
13
En el paso (3) para editar C: \ Windows \ System32 \ drivers \ etc \ hosts. La mejor práctica para ejecutar el editor (Bloc de notas, Notepad ++ o cualquier editor) como Administrador primero. Por lo tanto, puede guardar directamente en la carpeta C: \ Windows \ System32 \ drivers \ etc \.
CallMeLaNN
3
Si obtiene 403 errores, consulte este enlace
Wojtek Owczarczyk
21
Usando Order allow, deny Allow de todos en Win7 devuelve 403 ERROR porque estas opciones están en desuso. Uso Requerir todo otorgado. stackoverflow.com/questions/9110179/…
hywak
44
Solo para su información, este paso no pareció ser necesario para mí: Descomentar la línea 19 (NameVirtualHost *: 80)
Silverback
2
Usar Order allow,deny Allow from allno funcionó para mí, pero Require all grantedfuncionó.
Danny Beckett
96

Puede reubicarlo editando la configuración de DocumentRoot en XAMPP \ apache \ conf \ httpd.conf.

Actualmente debería ser:

C: / xampp / htdocs

Cámbielo a:

C: / proyectos / transitCalculator / trunk

Dave Ward
fuente
40
No olvide editarlo en AMBAS líneas que soliciten DocumentRoot. Si solo cambia el superior, obtendrá errores de acceso de lectura, etc.
Arcolye
2
esto aplica para XAMP mac también?
Kiwi enojado
ahora por qué URL, ¿puede acceder a la página de índice?
Manish Kumar
49

Un VirtualHost también funcionaría para esto y puede funcionar mejor para usted, ya que puede alojar varios proyectos sin la necesidad de subdirectorios. Así es como lo haces:

httpd.conf (o \ httpd-vhosts.conf adicional en relación con httpd.conf. Las barras inclinadas "\" pueden hacer que no funcione):

NameVirtualHost *:80
# ...
<VirtualHost *:80>  
    DocumentRoot C:\projects\transitCalculator\trunk\
    ServerName transitcalculator.localhost
    <Directory C:\projects\transitCalculator\trunk\>  
        Order allow,deny  
        Allow from all  
    </Directory>
</VirtualHost> 

Archivo HOSTS (c: \ windows \ system32 \ drivers \ etc \ hosts generalmente):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

Ahora reinicie XAMPP y debería poder acceder a http: //transitcalculator.localhost/ y se asignará directamente a ese directorio.

Esto puede ser útil si está intentando replicar un entorno de producción en el que está desarrollando un sitio que se ubicará en la raíz de un nombre de dominio. Puede, por ejemplo, señalar archivos con rutas absolutas que se transferirán al servidor:

<img src="/images/logo.png" alt="My Logo" />

mientras que en un entorno que utiliza alias o subdirectorios, necesitaría realizar un seguimiento exacto de dónde estaba el directorio de "imágenes" en relación con el archivo actual.

pix0r
fuente
Tengo varias unidades de red en mi PC que se han asignado a letras de unidad (por ejemplo X:\myfolder). Cuando uso este método, aparece una advertencia de "Acceso prohibido". ¿Significa esto que el usuario de Apache no tiene acceso de lectura a la unidad?
harryg
1
Bajo Directoryreemplazar Order allow,denyy Allow from allcon Require all granted. Ver stackoverflow.com/questions/9110179/…
Michiel
16

Puede configurar Apache para que sirva páginas desde cualquier lugar con restricciones, pero normalmente se distribuye de forma más segura.

Editar sus archivos apache (http.conf es uno de los nombres más comunes) le permitirá configurar cualquier carpeta para que aparezca en su raíz web.

EDITAR:

alias myapp c: \ myapp \

Edité mi respuesta para incluir el formato para crear un alias en el archivo http.conf que es como un acceso directo en Windows o un enlace simbólico debajo de un * x donde Apache 'finge' que una carpeta está en la raíz web. Probablemente esto sea más útil para usted a largo plazo.

chispas
fuente
10

Si está tratando de hacer que XAMPP use una unidad de red como raíz del documento, debe usar rutas UNC en httpd.conf. XAMPP no reconocerá sus unidades de red asignadas.

Por ejemplo, lo siguiente no funcionará, DocumentRoot "X: / webroot"

Pero esto será, DocumentRoot "//192.168.10.100/webroot" (tenga en cuenta las barras diagonales, no las barras diagonales inversas)

Jason
fuente
Funciona bien con mi unidad de red asignada.
Sean Kendle
7

Solución para permitir que Apache 2 aloje sitios web fuera de htdocs:

Debajo de la directiva "DocumentRoot" en httpd.conf, debería ver un bloque de directorio. Reemplace este bloque de directorio con:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Allow from all
</Directory> 

RECUERDE NO USAR ESTA CONFIGURACIÓN EN UN ENTORNO REAL

Leandro
fuente
Funciona solo para sistemas de archivos que admiten symlincs. No hay explicación de por qué esta opción no debe usarse.
Danubian Sailor