Я использую следующий сценарий 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]