Удалить "index.php" из URL - Codeigniter - PullRequest
8 голосов
/ 25 июля 2011

Я смотрел в документации Codeigniter об удалении index.php из URL при доступе к различным представлениям, код показывает, как удалить его с помощью apache:

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

Однако, когда я идуhttp://localhost/code/home, я получаю это:

Запрошенный URL / код / ​​home не был найден на этом сервере.

Но доступ к http://localhost/code/index.php/home работает просто отлично,почему это не работает для меня?

Я нахожусь на Mac OS X Snow Leopard с использованием каталога Sites: /Users/~myusername~/Sites/code, и я не использую никакого программного обеспечения, то есть MAMP, XAMPP.

РЕДАКТИРОВАТЬ

Для команды sudo /usr/sbin/apachectl -k restart -S я получаю это:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server code.local (/private/etc/apache2/httpd.conf:146)
         port 80 namevhost code.local (/private/etc/apache2/httpd.conf:146)
Syntax OK

Ответы [ 12 ]

8 голосов
/ 28 июля 2011

Вам нужно сделать "http://localhost/code" вашим корнем сети как 'code.local' (в моем примере). Предполагая, что ваши настройки в Mac OS X Snow Leopard совпадают с моими.

Вы должны добавить следующие строки в "/etc/apache2/extra/httpd-vhosts.conf"

<VirtualHost *:80>
    DocumentRoot "/Users/~myusername~/Sites/code"
    ServerName "code.local"
    ErrorLog "/private/var/log/apache2/code-error_log"
    CustomLog "/private/var/log/apache2/code-access_log" common
</VirtualHost>

Также убедитесь, что он не закомментирован в "/etc/apache2/httpd.conf"

# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf

Затем вы добавляете code.local в ваш / etc / hosts, который должен выглядеть следующим образом

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
127.0.0.1       code.local

Затем перезапустите ваш apache "/ usr / sbin / apachectl -k restart".

Возможно, вам понадобится sudo, если вы не являетесь суперпользователем. Надеюсь, это поможет.

EDIT: Чтобы проверить, работает ли ваш виртуальный хост. Запустить это sudo / usr / sbin / apachectl -k restart -S Чтобы узнать, был ли code.local добавлен в качестве одного из ваших виртуальных хостов.

Затем попробуйте получить доступ к code.local / index.php / welcome и code.local / welcome, чтобы проверить, работает ли он.

7 голосов
/ 25 июля 2011

Попробуйте это

DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA] 

Я пробовал 3, прежде чем я получил один на работу

6 голосов
/ 17 октября 2012

Чтобы удалить index.php из URL, просто добавьте

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

в файле .htaccess и переместите файл .htaccess рядом с местоположением index.php

/var/www/CodeIgniter/index.php
/var/www/CodeIgniter/.htaccess

в config.php в наборе конфигурационных папок

$config['index_page'] = '';
3 голосов
/ 26 июля 2011

Поскольку ваша установка CI не находится в корневом каталоге вашего документа, вы должны добавить RewriteBase /code/, чтобы она заработала.

Это мой .htacces, который я использую для установки CI (это немного сложнееодин поставляется с официальной документацией):

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /code/

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

Также убедитесь, что ваш httpd может обрабатывать файл .htaccess.Проверьте в httpd.conf, существует ли строка с AllowOverride all внутри <Directory></Directory> элемента

Надеюсь, эта помощь

2 голосов
/ 01 декабря 2012

У меня та же проблема, дело в том.

  1. htacces должен быть в корне Codeigniter
  2. Удалите «Запретить все» в файле htacces.
  3. Добавьте код на пост выше
2 голосов
/ 27 июля 2011

Try ...

RewriteEngine on
RewriteBase /code/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ code/index.php/$1 [L]
1 голос
/ 25 июля 2011

Вы должны изменить

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

на

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

Вам также необходимо изменить переменную $ config ['index_page'] следующим образом:

$config['index_page'] = '';

Пожалуйста, обратитесь к моему сообщению на http://www.boxoft.net/2011/07/removing-index-php-from-codeigniter-2-0-2-url/, если хотите.

0 голосов
/ 12 октября 2012
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Создайте файл .htacess в корневой папке вашего веб-каталога в codeigniter, используя приведенный выше код.Вы сможете удалить index.php, если URL-ссылка содержит index.php, поэтому он будет отображать страницу без ошибок.Или, если URL не содержит index.php, он отобразит страницу без index.php в URL.

0 голосов
/ 17 мая 2012

скопируйте .htaccess в вашу главную папку codeigniter, у меня был localhost / codeigniter /, а затем измените {RewriteBase / на RewriteBase / codeigniter /}

0 голосов
/ 30 июля 2011

в /etc/apache2/users/.conf

попробуйте добавить ..

<Directory "/Users/<your user name>/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

и перезапустите Apache, чтобы проверить результаты ..

...