Configuración de Apache y PHP (2)

Introducción

¡Atención!Nota: Esta página contiene información sobre la configuración de Apache y PHP que no se utiliza en clase, pero que puede resultar de interés.

Esta explicación sobre la configuración de Apache y PHP se escribió para XAMPP 1.8.3 y puede no funcionar en versiones posteriores.

Configuración de Apache

Control de acceso en Apache

En Apache 2.2. el control de acceso se realizaba mediante las directivas Order, Allow, Deny, and Satisfy.

En Apache 2.4 , el control de acceso se realiza mediante el módulo mod_authz_host, que utiliza otras directivas, aunque el módulo mod_access_compat permite utilizar las directivas antiguas.

En el caso de XAMPP, la versión XAMPP 1.8.0 (que ya incluía Apache 2.4.2) utilizaba todavía las directivas habituales de Apache 2.2 order y deny. El fichero httpd.conf contenía una directiva Directory general que restringía el acceso general a los directorios utilizando las directivas Order y Deny

# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

Por eso, cuando el usuario quería permitir el acceso a un directorio (por ejemplo en un alias) debían utilizarse esas mismas directivas. Por ejemplo

<IfModule alias_module>

   Alias /miproyecto/micarpeta "C:\Users\NombreDeUsuario\Documents\PHP"
   <Directory "C:\Users\NombreDeUsuario\Documents\PHP">
     Options Indexes FollowSymLinks Includes ExecCGI
     AllowOverride All
     Order allow,deny
     Allow from all
   </Directory>

   ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"
</IfModule>

Sin embargo, la versión XAMPP 1.8.3 (que incluye Apache 2.4.4) utiliza ya la directiva Require. El fichero httpd.conf contiene una directiva Directory general que restringe el acceso general a los directorios utilizando la directiva Require

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
    AllowOverride none
    Require all denied
</Directory>

Por eso, cuando el usuario quiere permitir el acceso a un directorio (por ejemplo en un alias) debe utilizarse esa misma directiva. Por ejemplo

<IfModule alias_module>

   Alias /miproyecto/micarpeta "C:\Users\NombreDeUsuario\Documents\PHP"
   <Directory "C:\Users\NombreDeUsuario\Documents\PHP">
     Options Indexes FollowSymLinks Includes ExecCGI
     AllowOverride All
     Require all granted
   </Directory>

   ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"
</IfModule>

¡Atención!En este curso se aconseja el uso de versiones posteriores a XAMPP 1.8.0, por lo que los ejemplos utilizarán la directiva Require. En caso de que un alumno no pueda utilizar versiones posteriores a XAMPP 1.8.0 (por ejemplo, porque utiliza Windows XP), deberá emplear las0 directivas Order y Allow.

DocumentRoot

¡Atención!Nota: En este curso no se recomienda el cambio de la directiva DocumentRoot, aunque se comente a continuación cómo hacerlo.

La directiva DocumentRoot especifica el directorio donde se encuentran las páginas web. Cuando en la barra de dirección del navegador se escriba una dirección que comience por http://localhost/, el servidor buscará los archivos a partir de ese directorio. La directiva DocumentRoot va acompañada de una directiva <Directory> que especifica qué servicios y características están permitidos o prohibidos en el directorio.

En XAMPP 7.0 el valor predeterminado de DocumentRoot es el siguiente:

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks Includes ExecCGI

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

Si se quiere cambiar DocumentRoot y utilizar, por ejemplo, el directorio C:\www, hay que modificar tanto la línea de DocumentRoot como el Directory correspondiente. El archivo de configuración debería quedar así (se ha resaltado el texto añadido):

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
# 2016-09-12. Barto. He cambiado el directorio raíz del servidor
# DocumentRoot "C:/xampp/htdocs"
DocumentRoot "C:/www"

# 2016-09-12. Barto. He cambiado la directiva Directory de DocumentRoot
# <Directory "C:/xampp/htdocs">
<Directory "C:/www">
#
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks Includes ExecCGI

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

Hay que tener cuidado con las erratas, ya que cualquier error impedirá que Apache se ponga en marcha.

UserDir

¡Atención!Nota: En este curso no se recomienda el uso de UserDir, aunque se comente aquí cómo hacerlo.

Como en un ordenador con Windows XP puede haber varios usuarios, puede ser un problema que todos los usuarios utilicen el mismo directorio raíz. La directiva UserDir permite que cada usuario guarde sus páginas en su propio directorio Mis Documentos y que cada uno acceda a ellos escribiendo en el navegador la dirección http://localhost/~nombre-de-usuario.

Hay que tener en cuenta que aunque se definan directorios de usuarios, http://localhost sigue mostrando el directorio indicado por la directiva DocumentRoot.

Para que Apache pueda acceder a los directorios de los usuarios, en httpd.conf debe estar cargado el módulo userdir mediante la directiva:

LoadModule userdir_module modules/mod_userdir.so

En XAMPP 1.8.3 esta directiva está comentada de forma predeterminada, por lo que es necesario borrar el carácter de almohadilla.

El archivo de configuración debería quedar así (se ha resaltado el texto añadido):

# 2013-09-19. Barto. Cargo el módulo userdir_moduleLoadModule userdir_module modules/mod_userdir.so

Si se carga el módulo userdir, entonces deben indicarse los módulos de usuario mediante la directiva UserDir. En XAMPP 1.8.3 la configuración de los directorios de usuario se realiza en un archivo separado (aunque el contenido de este archivo podría incluirse en el archivo httpd.conf) que se encuentra referenciado mediante la directiva

Include conf/extra/httpd-userdir.conf

En XAMPP 1.8.3 esta directiva no está comentada de forma predeterminada, por lo que no es necesario modificarla, aunque conviene comprobarlo.


El archivo httpd-userdir.conf contiene las directivas UserDir y <Directory> que especifican la ubicación de los archivos de usuario y su modo de acceso.

El directorio de usuario se puede definir para todos los usuarios (utilizando el carácter *, como en el ejemplo siguiente) o para un usuario concreto, utilizando el nombre del usuario en vez del carácter *.

En el ejemplo siguiente la carpeta de usuario para todos los usuarios será la carpeta Mis documentos/www:

<IfModule userdir_module>
    # 2013-09-19. Barto. He añadido este Directorio de usuario para todos los usuarios:
UserDir "Documents/www"
<Directory "C:\Users\*\Documents\www">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

</IfModule>

Hay que tener cuidado con las erratas, ya que cualquier error impedirá que Apache se ponga en marcha.