Estoy usando CodeIgniter en una máquina Windows con el Zend Comunity Servidor con apache. Mi apache está configurado correctamente para manejar .htaccess directivas y mod_rewrite está habilitado (httpd.conf):

<Directory />
    Options FollowSymLinks
    AllowOverride FileInfo
    Order deny,allow
    Deny from all
</Directory>

Mi raíz es C:\www\ y mi sitio está ubicado en C:\www\david\ y cuando me escriba http://localhost/david/, el index.php se carga junto con el controlador correcto. Quiero acceder a mi las cosas de manera directa a través de http://localhost/david/Articles/ en lugar de http://localhost/david/index.php/Articles/. Para ello tengo que usar apache rewrite module.

Para ello, he colocado un .htaccessarchivo en el C:\www\david\ carpeta. Este archivo contiene el código que he encontrado en aquí :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /david/

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^core.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule> 

He hecho un par de cambios en el código, ya que mi configuración es un poco diferente de la predeterminada. Yo no estoy en la raíz así : ‘RewriteBase /davidfrancoeur.com/’ y he cambiado el nombre de la CodeIgniter carpeta del sistema de seguridad adicional, así :
RewriteCond %{REQUEST_URI} ^núcleo.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

Con este hecho, nada debería funcionar correctamente, yo debería ser capaz de acceder a http://localhost/david/Articles/ sin problema y pienso que no debería ser capaz de llegar a http://localhost/david/core/config/config.php directamente.

Por desgracia, no funciona, ni siquiera se parece a alguno de reescritura se hace. ¿A ver si estoy haciendo algo mal aquí? Hay una manera de saber si apache en realidad reescribir nada?

Muchas gracias. Y sí, me miró a los millones de artículo podría encontrar sobre esto… 🙁

EDITAR

CI 2.0.2, PHP 5.3, Apache 2.2

InformationsquelleAutor David | 2011-04-21

3 Comentarios

  1. 3

    Va a trabajar…..de hecho sus dos primeros reescribir las condiciones y normas de trabajo, pero en la tercera reescribir la condición que está permitiendo al usuario acceder a la petición de archivo ,incluso si es básico o sistema de archivos.

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !^core.*
        RewriteCond %{REQUEST_FILENAME} !^system.*
        RewriteRule ^(.*)$ index.php?/$1 [L]

    Edit: Solucionado ‘reescribir’ error tipográfico

    • Todavía puedo acceder a la carpeta core, la aplicación y la carpeta sys se muestran.
  2. 1

    Después de mirar atentamente en el httpd.conf de mi Zend Servidor de la Comunidad, me di cuenta de que había dos <Directory />instrucción. El primero estaba vacío, como se muestra en la pregunta, y la segunda parecía que :

    <Directory "C:\Dropbox\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.2/mod/core.html#options
        # for more information.
        #
        Options Indexes FollowSymLinks
        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        #
        AllowOverride None
        #
        # Controls who can get stuff from this server.
        #
        Order allow,deny
        Allow from all
    </Directory>

    He cambiado la siguiente línea AllowOverride None a AllowOverride All » y funcionó. Para aquellos que quieran saber más acerca de reescritura de URL con CodeIgniter buscar allí : http://codeigniter.com/wiki/mod_rewrite/

    Y para entender correctamente lo que AllowOverridelee : http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

    Gracias de nuevo a han ayudado alguna vez!

  3. 0

    ppet impide el acceso del usuario a la carpeta de la aplicación
    #Enviado por: Fabdrol
    #Cambiar el nombre de la «aplicación» a tu carpeta de aplicaciones nombre.
    RewriteCond %{REQUEST_URI} ^de la aplicación.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]

Dejar respuesta

Please enter your comment!
Please enter your name here