2011-01-31 2 views
2

Codeigniter v2.0, выпущенный на 28-м. Я только что установил новую установку и попытался удалить index.php из URL-адреса. Я использую ту же конфигурацию, доступную для сайта apache, htaccess и codeigniter.codeigniter 2 htaccess различия маршрутизации

Codeignter загружает только контроллер по умолчанию, определенный в routes.php, когда я исключаю index.php.

Например

Вот моя конфигурация Apache для сайта.

<VirtualHost *:80> 
ServerAdmin [email protected] 
ServerName myurl.com 
DocumentRoot /var/www/myurl.com 
<Directory /> 
    Options FollowSymLinks 
    AllowOverride FileInfo 
</Directory> 
<Directory /var/www/myurl.com> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride FileInfo 
    Order allow,deny 
    allow from all 
</Directory> 

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
<Directory "/usr/lib/cgi-bin"> 
    AllowOverride None 
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
    Order allow,deny 
    Allow from all 
</Directory> 

ErrorLog /var/log/apache2/error.log 

# Possible values include: debug, info, notice, warn, error, crit, 
# alert, emerg. 
LogLevel warn 

CustomLog /var/log/apache2/access.log combined 

Alias /doc/ "/usr/share/doc/" 
<Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
</Directory> 

Вот моя конфигурация Htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

#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 

А вот мой конфигурационный файл CodeIgniter найден /var/www/mysite.com/application/config/config. php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

/* 
|-------------------------------------------------------------------------- 
| Base Site URL 
|-------------------------------------------------------------------------- 
| 
| URL to your CodeIgniter root. Typically this will be your base URL, 
| WITH a trailing slash: 
| 
| http://example.com/ 
| 
| If this is not set then CodeIgniter will guess the protocol, domain and 
| path to your installation. 
| 
*/ 
$config['base_url'] = 'mysite.com'; 

/* 
|-------------------------------------------------------------------------- 
| Index File 
|-------------------------------------------------------------------------- 
| 
| Typically this will be your index.php file, unless you've renamed it to 
| something else. If you are using mod_rewrite to remove the page set this 
| variable so that it is blank. 
| 
*/ 
$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'] = 'AUTO'; 

/* 
|-------------------------------------------------------------------------- 
| URL suffix 
|-------------------------------------------------------------------------- 
| 
| This option allows you to add a suffix to all URLs generated by CodeIgniter. 
| For more information please see the user guide: 
| 
| http://codeigniter.com/user_guide/general/urls.html 
*/ 

$config['url_suffix'] = ''; 
+0

RewriteRule^(. *) $ /index.php/$1 [L] (без вашего знака вопроса)? – Aif

ответ

6

Я обнаружил, что изменение типа маршрутизации с AUTO на REQUEST_URI заставило все работать.

$config['uri_protocol'] = 'AUTO'; 

в

$config['uri_protocol'] = 'REQUEST_URI'; 
+0

Когда дело доходит до uri_protocol, все хосты разные, поэтому, когда есть что-то пропущенное с вашими URL-адресами, и вы уверены, что это не ваши правила .htaccess, я рекомендую, чтобы все обходились с помощью значения uri_protocol. У меня возникли проблемы, когда значение PATH_INFO будет работать только на некоторых серверах, тогда как AUTO будет работать в основном на других. –

+1

REQUEST_URI - обязательное значение для моего локального хоста MAMP. Кажется, что он отличается от предыдущей версии CI :( – stef

+1

Мне очень понравилось, что для предыдущих версий CI я мог оставить uri_protocol установленным в AUTO, и он будет работать почти повсеместно. Теперь мне придется возиться с разными значениями конфигурации при тестировании/производстве серверов. Не так удобно ... :( – janosrusiczki

Смежные вопросы