2013-03-06 4 views
1

Я столкнулся с проблемой нечетного пути в CodeIgniter/MAMP Pro. Я включил хороший URL-адреса в CodeIgniter (спрятался index.php из URL), установив $config['index_page'] = ''; в config.php и добавив следующие .htaccess:Ошибка управления MAMP Pro/CodeIgniter

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

Мое приложение работает нормально, но я не в состоянии поразить мой CSS и JS-файлы по какой-то причине. Если я набираю http://mysite:8888/js/jquery.js, я получаю страницу CodeIgniter 404. Любая идея о том, почему это может быть так?

ответ

2

Я использую этот .htaccess для проектов CodeIgniter на MAMP. Он поддерживает вложенные папки тоже:

<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 
</IfModule> 

.htaccess файлов читаются динамически и не нужен перезапуск MAMP, если вы не наладка файлов Apache в его суть.

robots.txt не является действительно секретным файлом, поэтому на самом деле не важно его маскировать.

Сценарии/изображения/etc. вам нужно просто добавить файл index.html, например CodeIgniter в свою системную папку. Таким образом, пользователи не могут просматривать эти папки. Не забудьте скопировать файлы index.html во вложенные папки тоже. Это может показаться грязным, но будет намного чище, чем загромождать ваш htaccess с еще большим количеством правил.

+0

Я обновил мой вопрос, чтобы более точно и кратко описать мою проблему. Я попытался добавить свой код в свой .htaccess, но он, похоже, не работал. Похоже, что MAMP Pro больше не читает мой файл .htaccess и вместо этого использует некоторую кешированную версию или что-то в этом роде. – themarkappleby

+0

Попробуйте отключить кеширование в тестовой среде и включите его только тогда, когда ваш проект готов к развертыванию. Установите PHP Extension [Cache] на '--', чтобы предотвратить эти неприятности :). – 2013-03-06 16:37:10

+0

Мой PHP-кеш отключен в MAMP Pro - это не одно и то же? – themarkappleby

0

Я думаю, что вышеупомянутый ответ хорош, но поскольку CI динамически пишет URL-адреса, я предпочитаю этот метод. Кроме того, я думаю, что это помогает с написанием лучшего кода шаблона. (Я проверил это именно на MAMP.)

Для одного, установите файл .htaccess на следующее:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php|assets|robots\.txt) 
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 

Создать новый помощник в application/helpers. Я вызываю шахту assets_helper.php, но называю ее полезной. Поместите этот код в этом хелперов файле:

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

if (! function_exists('asset_url()')) { 
function asset_url() { 
    echo base_url().'assets/'; 
    } 
} 

Добавить помощник в файл автозагрузку в config/autoload.php а-ля

$autoload['helper'] = array('url', 'assets'); 

(Вы, возможно, не уже есть url помощник активирован, но часто.)

А также добавить маршрут к папке активов (в config/routes.php):

$route['assets/(:any)'] = 'assets/$1'; 

Теперь, когда вы хотите добавить css, или js или изображения, вам просто нужно положить <? assets_url(); ?> в код шаблона.

<img src="<? asset_url(); ?>images/logo.png" width="100" height="100" /> 

или

<link rel="stylesheet" href="<? asset_url(); ?>css/house.css"> 
Смежные вопросы