Удалить "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 ]

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

Со слов документации CodeIgniter

По умолчанию файл index.php будет включен в ваши URL:

example.com / index.php / news / article / my_articleВы можете легко удалить этот файл, используя файл .htaccess с некоторыми простыми правилами.Вот пример такого файла, использующего «отрицательный» метод, в котором все перенаправляется, кроме указанных элементов:

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

В приведенном выше примере любой HTTP-запрос, отличный от запросов для index.php,images, а robots.txt обрабатывается как запрос для вашего файла index.php.

вы можете найти его здесь: http://codeigniter.com/user_guide/general/urls.html

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

Все части URI переписаны, поэтому он указывает на /index.php/code/home. Хороший способ сделать это - настроить отображение, например. http://code.local, чтобы указать ваш / Users / ~ myusername ~ / Sites / code, тогда все ваши запросы будут решены на корневом уровне, и все будет работать как надо.

РЕДАКТИРОВАТЬ: Downvoters, кажется, невежественны, но не имеет значения ..

Вот что теперь делает ваш код:

GET http://localhost/code/home
// rewritten to:
http://localhost/index.php/code/home

Итак, как я уже говорил, ХОРОШИМ способом было бы сопоставление хоста, чтобы вы получили все на корневом уровне (что ХОРОШО, так как, скорее всего, у вас это будет на производственном сервере ...), и это поможет. без изменений в .htaccess.

В противном случае вы можете использовать совет Франческо с RewriteBase, но немного изменилось:

// Francesco's RewriteRule does this:
http://localhost/code/home
// rewritten to"
http://localhost/code/index.php/code/home

поэтому просто измените RewriteRule на это:

RewriteRule ^code/(.*)$ index.php?/$1 [L]
// rewrites in your case to:
http://localhost/code/index.php/home
// which is what you wanted, aye?
...