Welcome Guest, Not a member yet? Register   Sign In
problem with mod rewrite
#1

[eluser]vindhyareddy[/eluser]
I am trying to make changes and create a .htaccess file to prevent the use of index.php in my url.

I have my code set up on localhost.

The code is in ./www/devit

I am writing the following code under .htaccess - and placing it at ./www/devit/.htaccess

Code:
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase http://localhost/devit
    

    #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} ^system.*
    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>

Inorder to access a controller by name users, I need to use the url as :
http://localhost/devit/index.php/users/id/1

I want this to change to:
http://localhost/devit/users/id/1

But when I put this .htaccess file in the devit folder I am getting a 500 internal server error.

Can someone guide me with this? What is the probable mistake I am making?

FYI,
config.php is :
Code:
&lt;?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config['base_url']    = "http://localhost/devit/";

$config['index_page'] = '';

/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string.  The default setting of "AUTO" works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'        Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'        Uses the REQUEST_URI
| 'ORIG_PATH_INFO'    Uses the ORIG_PATH_INFO
|
*/
//$config['uri_protocol']    = "PATH_INFO"; // You need to use PATH_INFO to enable ?var=somthing strings
$config['uri_protocol'] = 'AUTO';


$config['url_suffix'] = "";

$config['language']    = "english";

$config['charset'] = "UTF-8";

$config['enable_hooks'] = FALSE;


$config['subclass_prefix'] = 'MY_';

.....

Any suggestions or solutions????
#2

[eluser]KingSkippus[/eluser]
If you haven't already, read the "Removing the index.php file" section of the CodeIgniter URLs chapter of the user manual.

My first thought looking at your .htaccess is that man, that's kind of overkill for something that's pretty simple. About the only tweak I've ever seen anyone need is adding top-level subdirectories to the RewriteCond line. For example, if you have top-level /css and /scripts directories, use the following line:

Code:
RewriteCond $1 !^(index\.php|images|robots\.txt|css|scripts)

Is there something in particular that you were trying to accomplish with that version of the .htaccess that the one described in the manual doesn't do?
#3

[eluser]KingSkippus[/eluser]
[quote author="vindhyareddy" date="1279679250"]
Inorder to access a controller by name users, I need to use the url as :
http://localhost/devit/index.php/users/id/1
[/quote]

Ah, here's your problem. The RewriteRules assume that all of this stuff is in your root directory. Since you've got your CodeIgniter stuff buried in a subdirectory, you need to modify your RewriteRules to take that into account:

Code:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^/devit/(.*)$ /devit/index.php/$1 [L]

In your example, you define a RewriteBase directory. According to the mod_rewrite documentation, it shouldn't contain the server name. Alternatively, you could change your RewriteBase line to:

Code:
RewriteBase /devit
#4

[eluser]vindhyareddy[/eluser]
Hey

Thanks for the replies.

I did the changes as u said to my .htaccess file.

Now my .htaccess is as follows:
Code:
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /devit
    
    RewriteCond $1 !^(index\.php|images|robots\.txt)
    RewriteRule ^/devit/(.*)$ /devit/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>

Whats the mistake ??

When I try
http://localhost/devit/index.php/users/user_info/id/2
I am getting a 404 page not found error

When I try
http://localhost/devit/users/user_info/id/2
I am getting
"Not Found

The requested URL /devit/users/user_info/id/2 was not found on this server.
#5

[eluser]pickupman[/eluser]
The file is relative to where you place the .htaccess file. Here is my copy I've got running CI in a subfolder. The .htaccess is placed in my subfolder. c:\wamp\www\property\.htaccess
Code:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
#6

[eluser]vindhyareddy[/eluser]
Hey pickupman

So now u have put the CI folder and the property folder in www
And CI has your code and property has the .htaccess file.

Is that right?

Also, how are you telling your CI folder to access this .htaccess?

My file structure is as follows:
C:/wamp/www/devit
devit has
- application
- system
- index.php
- license.txt
- README.markdown

I am developing a RESTful web services API.

So now how do I write the rule in the .htaccess file?

I need to access :
http://localhost/devit/index.php/users/user/id/1
as
http://localhost/devit/users/user/id/1

Here, devit is my folder in www.
users is my controller name
user is my function
and id is parameter name with value 1
#7

[eluser]pickupman[/eluser]
I've got the same thing:
c:\wamp\www
\property
\application
\system
index.php
.htaccess

I have many CI project subfolders. I use the same .htaccess in each of them. When I upload the files to server in the root folder, .htaccess will still work because it is relative to the folder it is in. Copy the contents I posted above, clear your browsers cache, and reload.




Theme © iAndrew 2016 - Forum software by © MyBB