Intereting Posts

Переписывание URL-адреса Codeigniter

Я использую следующий сценарий htaccess чтобы скрыть index.php из URI.

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

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

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

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

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

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

 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.

Это файл .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> 

Вот полное решение, которое я использую и считаю полезным:

Разместите этот фрагмент кода ниже в файле .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, расположенном в system \ application \ config \ config.php

 $config['uri_protocol'] = "REQUEST_URI"; 
 # 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] 

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

Вставьте следующее в свой .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]