2010-06-08 3 views
6

Я использую следующий скрипт htaccess, чтобы я мог скрывать index.php от URI.URL-адрес URL-адреса Codeigniter

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

Но я столкнулся с серьезной проблемой :(

У меня есть каталог с именем assetsindex.php рядом с моим файлом, и он должен быть там. Когда я просматриваю каталог в браузере, то Codeigniter-х не найдено отображается страница. Я не могу просмотреть файл /assets/image.jpg, но он показывает, когда я называю его из <img> тега

Что я могу сделать сейчас?

Обратите внимание, что он работает на моем локальном сервере (localhost), но не на реальном сервере.

ответ

6

Вы, ребята, об этом подумали.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)$ /index.php/$1 [NC,L] 

Это передаст любой запрос, который Apache не будет подавать на CodeIgniter. Таким образом, вы можете свободно создавать каталоги без обновления правил перезаписи, и вам не нужно настраивать обработку 404 в Apache (даже внутри ваших каталогов изображений/ресурсов).

Кредит предоставляется авторам Zend Framework, которые рекомендуют этот бит в своем руководстве пользователя. Эта версия слегка модифицирована для CodeIgniter.

0

Это файл .htaccess я использую для моего CI установки:

Если у вас есть в подкаталоге вам нужно будет редактировать RewriteBase.

<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> 
+0

Вы имеете в виду вы еще не перенесли системную папку за пределами папки общего доступа? Что произойдет, когда вы (или ваш администратор) отключите AllowOverride при аварии? У CI есть беспорядочные прерывания во всех их файлах, но вы подтвердили, что ваши файлы безопасны, чтобы быть точкой входа для пользователя? Легче просто переместить системную папку до родителя и иметь отдельный общий каталог. – coreyward

+0

Да, это правда, и я переместил свою системную папку на мой производственный сервер. –

0

Вот полное решение, которое я использую, и найденную работает хорошо:

Поместите этот фрагмент кода ниже в файле .htaccess в корневом каталоге проекта как http://localhost/myProject

RewriteEngine On 
RewriteBase /appDirName 
RewriteCond %{REQUEST_URI} ^appDirName.* 
RewriteRule ^(.*)$ /index.php/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 

И в вашем CI файл конфигурации, расположенный в системе \ application \ config \ config.php

$config['uri_protocol'] = "REQUEST_URI"; 
0
# Turn on URL rewriting 
RewriteEngine On 
# Put your installation directory here: 
RewriteBase/
# Allow these directories and files to be displayed directly: 
# - index.php (DO NOT FORGET THIS!) 
# - robots.txt 
# - favicon.ico 
# - Any file inside of the images/, js/, or css/ directories 
RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|images|js|css) 
# No rewriting 
RewriteRule ^(.*)$ - [PT,L] 
# Rewrite all other URLs to index.php/URL 
RewriteRule ^(.*)$ index.php/$1 [PT,L] 

Я использую это и отлично работает!

0

Вставьте следующий код в ваш .htaccess

# Change "welcome" to your default controller: 
    RewriteRule ^(welcome(/index)?|index(\.php)?)/?$/[L,R=301] 
    RewriteRule ^(.*)/index/$ $1 [L,R=301] 

# Checks to see if the user is attempting to access a valid file, 
# if not send them to index.php 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php/$1 [L]