2012-03-09 26 views
12

enter image description here Hey guyz soy un novato en el framework Yii. Quiero eliminar el index.php de mis URL. Siguiendo la documentación de yii cuando puse el código de reescritura del motor en mi archivo .htaccess y estableciendo showScriptName en false en mi archivo config/main.php, recibo el error del servidor interno 500. Mi archivo .htaccess se encuentra en la carpeta raíz de mi aplicación. Dime donde estoy haciendo malCómo eliminar index.php en Yii Framework

ACTUALIZACIÓN:

Este es el código en mi archivo .htaccess:

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php 
RewriteRule . index.php 
+2

Bueno, ¿no crees que mostrarle el htacess ayudaría más que una imagen ... –

+1

Estoy seguro de que la documentación de YII cubre esto también. – hakre

+2

Asegúrate de tener 'mod_rewrite' – Shiki

Respuesta

5

Si también desea eliminar /index de la URL principal página, añadir ''=>'site/index' a la parte superior de sus reglas urlManager, así:

'urlManager'=>array(
    'urlFormat'=>'path', 
    'showScriptName' => false, 
    'rules'=>array(
     ''=>'site/index', 
     '<action>'=>'site/<action>', 
3

tomadas directamente de yii documentation

Ocultación index.php Hay es una cosa más que podemos hacer para limpiar aún más nuestras URL, es decir, ocultar el script de entrada index.php en la URL. Esto requiere que configuremos el servidor web y el componente de la aplicación urlManager.

Primero tenemos que configurar el servidor web para que el script de entrada pueda seguir manejando una URL sin el script de entrada. Para el servidor Apache HTTP, esto se puede hacer activando el motor de reescritura de URL y especificando algunas reglas de reescritura. Podemos crear el archivo /wwwroot/blog/.htaccess con el siguiente contenido. Tenga en cuenta que el mismo contenido también puede colocarse en el archivo de configuración de Apache dentro del elemento Directorio para/wwwroot/blog.

RewriteEngine on 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php 
RewriteRule . index.php 

A continuación, configure la propiedad showScriptName del componente urlManager ser falsa.

Ahora si llamamos $ this-> createUrl ('post/read', array ('id' => 100)), obtendremos la URL/post/100. Más importante aún, esta URL puede ser reconocida adecuadamente por nuestra aplicación web.

Espero que esto ayude, porque resolvió mi problema también.

0

Acabo de encontrar este hilo pero encontré que para que funcione no solo tuve que seguir las instrucciones para agregar el archivo .htaccess, sino que también tuve que descomentar la sección a continuación de mi archivo de configuración principal (\ protected \ config \ main.php):

 // uncomment the following to enable URLs in path-format 

    'urlManager'=>array(
     'urlFormat'=>'path', 
     'rules'=>array(
      '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
     ), 
    ), 
3

¿estos 3 pasos:

  1. Habilitar Url re-escribir en Apache.

  2. Lugar..htaccess en la raíz del proyecto

RewriteEngine en

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php 
  1. En la configuración protegida/config/main.php conjunto showScriptName a falso como este para sus componentes URL Manager> > urlManager
'urlManager'=>array(
    'urlFormat'=>'path', 
    'rules'=>array(
     '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
), 
    'showScriptName'=>false, 
) 
0

También tuve este problema hoy cuando cambié mi proyecto al servidor de Linux. Hice todo lo que se muestra, pero no ayudó. Entonces, he copiado .htaccess archivo a protegida directorio también, entonces funcionó.

1

cambio de su configuración/main.php, como a continuación:

'urlManager'=>array(
     'urlFormat'=>'path', 
     'showScriptName'=>false, 
     'caseSensitive'=>false, 
     'rules'=>array(
      '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
     ), 

A continuación, coloque su archivo .htaccess en el directorio base con la carpeta protegida (que puede ser protegido en el interior de la carpeta) lugar por debajo de código a su archivo .htaccess

RewriteEngine on 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php 
RewriteRule . index.php 

o prueba con este ---

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA] 

d uno ... espero que funcione

0

Asegúrate de que si después de todos tus cambios a .htaccess & urlManager, si aún no parece funcionar para ninguno de ustedes, es que ha modificado su parámetro AllowOverride para el directorio raíz en el archivo httpd.conf de Apache a "Todos" en lugar de "Ninguno". Después de la modificación, reinicie Apache. Debido a que este es el parámetro que deje Apache decidir lo que todos los parámetros se pueden reemplazar en el archivo .htaccess

0

modificar los valores de configuración de Apache

AllowOverride None a AllowOverride All

en httpd .conf o httpd-vhosts.conf

Cuestiones relacionadas