Yii and .htaccess file on production server

.htaccess, production-environment, yii

Solution

You should not hide index.php like this, read carefully : http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x

You should set `showScriptName` to false in your main config :

'urlManager'=>array(
  .....
  'showScriptName'=>false,
  .....
),

And your .htaccess should look like this :

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

Problem

I am new to yii and have some problem in configuring .htaccess file on production server. On localhost : Location of Application : /www/connect_donors/ Default URL that yii provides is, ``` http://localhost/connect_donors/index.php?r=controllerId/functionName ``` We used the urlManager in /connect_donors/protected/config/main.php to configure the SEO friendly url's.. ``` '<controller:\w+>/<id:\d+>' => '<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', '<controller:\w+>/<action:\w+>' => '<controller>/<action>' ``` Now the URL that was working was ``` http://localhost/connect_donors/index.php/controllerId/functionName ``` Then I used the .htaccess file to remove index.php from the above URL. Location of .htaccess is : /connect_donors/.htaccess Following is .htaccess file, ``` RewriteEngine On RewriteBase /connect_donors RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA] ``` URL Chenged to : ``` http://localhost/connect_donors/controllerId/functionName ``` Everything working fine and awesome. But yesterday I uploaded the application on production server. On Production Server Everything remained same only I had to change the .htaccess file. The .htaccess file on server is, ``` RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA] ``` Now the following url: ``` http://donorsconnect.com/ ``` loads the home page of server properly. But, http://donorsconnect.com/profile redirects again to home page. NOTE : There is no session set on the "profile" controller. ``` class ProfileController extends CController { public function actionIndex() { $this->render('index'); } } ``` I tried lot of things, changing the .htaccess file to different codes. but none helped me. Any help is appreciable. Solution I finally got the solution and the mistake I had done. My Components had a request array containing baseUrl. ``` 'components'=>array( ... 'request' => array( 'baseUrl' => 'http://donorsconnect.com', ...), ``` Due to this it was not loading. I did not find the real reason for that. But after removing that 'request' array, its loading fine. Check link, http://donorsconnect.com/profile

Original source