使用mod_rewrite,xampp和windows的CodeIgniter配置

时间:2009-12-02 22:40:10

标签: php .htaccess codeigniter xampp

我是CodeIgniter的菜鸟,我正在尝试找出我正在构建的应用程序的配置。我的设置出了问题。

我在Windows上运行XAMPP并使用别名目录指向应用程序目录。换句话说:“http://localhost/app_name/”指向应用程序的根目录。在我为mod_rewrite执行.htaccess之前,这一切似乎都运行良好。然后,每当我尝试去控制器时,我都会回到xampp root。

我的配置是:

目录

/app_root
/app_root/codeigniter // where code igniter is located.
/app_root/main        // where the main app is located.  It' the applications 
                      // directory cut from code igniter and renamed.

的.htaccess

<IfModule mod_rewrite.**so**>
RewriteEngine On
RewriteBase **/app_name/**
RewriteCond %{REQUEST_URI} ^codeigniter.*
RewriteRule ^(.*)$ /index.php?/$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>

index.php

$system_folder = "@codeigniter";
$application_folder = "main";

APP_NAME /主/配置/ config.php中

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

APP_NAME /主/配置/ routes.php文件

$route['default_controller'] = "welcome";

我还应该声明app_name目录是与apache根不同的驱动器的别名。

Apache Root: c:\xampp\htdocs\
App_name: d:\projects\app_name\development\

别名是:

Alias /app_name "d:/projects/app name/development"
<Directory "d:/projects/app name/development">
  Options Indexes FollowSymLinks ExecCGI
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory> 

提前感谢您的帮助......如果您不介意,请“解释”您在回答代码时所做的工作。我想知道我做错了什么。如果你可以帮我这个,我会给你买啤酒(通过PayPal)。这令人沮丧。

4 个答案:

答案 0 :(得分:5)

成功!!

我终于设法让URL重写工作,这是一个漫长而艰辛的旅程。这是我最终的工作。请注意RewriteBase上没有反斜杠。鉴于我所读到的内容,非常有趣。感谢所有试图提供帮助的人。

# Options
Options -Multiviews
Options +FollowSymLinks

#Enable mod rewrite
RewriteEngine On
#the location of the root of your site
#if writing for subdirectories, you would enter /subdirectory
RewriteBase /app_name

#Removes access to CodeIgniter 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]

#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

#This last condition enables access to the images and css
#folders, and the robots.txt file
RewriteCond $1 !^(index\.php|images|robots\.txt|css)

RewriteRule ^(.*)$ index.php?/$1 [L]

答案 1 :(得分:2)

如果您在本地计算机上使用XAMPP,则应使用internal而不是mod_rewrite

它会以别名加载您的网页。

我花了一段时间才弄明白 - 显然你应该在远程服务器上使用mod_rewrite来实现同样的目标。

答案 2 :(得分:1)

RewriteBase /
你的.htaccess中的

应该是

RewriteBase /app_name/

指定它是哪个目录..

答案 3 :(得分:0)

首先,一个问题。您的$system_folder变量是否真的设置为:

$system_folder = "@codeigniter";

或者是那种来自怪物(对我来说)SO使用降价的方式?如果是,请删除@。它是目录/文件名的无效字符。

接下来,我相信您的RewriteBase应该是/,因为您在Apache中使用了别名,但请不要引用我。

我个人使用此处提供的.htaccess格式:CodeIgniter URLs in the User Guide;在删除index.php文件标题下。但是,有很多方法可以做到这一点。 quick Google search产生了几千个。

您是否启用了mod_rewriteCheck the forum post here