2013-07-04 2 views
2

Я знаю, что с точки зрения CI, если я поставилКак звонить CodeIgniter метод контроллера с точки зрения

hostname/projectname/controllername/methodname 

он будет вызывать метод контроллера КИ.

но это не работает. он говорит, что url запроса не существует. однако, если я поставил подобное,

hostname/projectname/index.php/controllername/methodname 

это работает. В чем проблема?

+0

Вы должны 'mod_rewrite', установленный на сервере, и вы должны изменить ваш файл'. htaccess' по мере необходимости – Basic

ответ

1

Вам необходимо настроить файл .htaccess, чтобы удалить index.php из требуемого.

Если у вас еще нет файла .htaccess, то follow this guide.

В код воспламенитель вы хотите, файл .htaccess выглядеть следующим образом:

<IfModule mod_rewrite.c> 

    RewriteEngine On 
    RewriteBase/

    ### Code Igniter Updates 

    # If your default controller is something other than 
    # "welcome" you should probably change this 
    RewriteRule ^(welcome(/index)?|index(\.php)?)/?$/[L,R=301] 
    RewriteRule ^(.*)/index/?$ $1 [L,R=301] 

    # Removes trailing slashes (prevents SEO duplicate content issues) 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+)/$ $1 [L,R=301] 

    # Enforce www 
    # If you have subdomains, you can add them to 
    # the list using the "|" (OR) regex operator 
    RewriteCond %{HTTP_HOST} !^(www|subdomain) [NC] 
    RewriteRule ^(.*)$ http://www.domain.tld/$1 [L,R=301] 

    # Enforce NO www 
    #RewriteCond %{HTTP_HOST} ^www [NC] 
    #RewriteRule ^(.*)$ http://domain.tld/$1 [L,R=301] 

    ### 

    # 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] 

    # 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> 

    # Without mod_rewrite, route 404's to the front controller 
    ErrorDocument 404 /index.php 

</IfModule> 

Замена: www.domain.tld с доменом, локальный, например, во время тестирования.

+0

все еще не работает :(. Потому что я пропустил установку mod_rewrite? – user2293633

+0

mod_rewrite является частью установки сервера apache, поэтому вы можете проверить, включена ли в локальную установку apache mod_rewrite. –

+0

Я проверил с phpinfo(), и я проверил, что он находится внутри загруженных модулей. Означает ли это, что это разрешено? если это так, почему он еще не работает :( – user2293633

1

Добавить это в htaccess file

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

См http://ellislab.com/codeigniter/user-guide/general/urls.html

Update Полный код

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
</IfModule> 
Смежные вопросы