2013-11-11 2 views
0

Я создал приложение, используя CodeIgniter и mod_rewrite (только для абстрактного индекса) в Windows (с WampServer). В этой среде приложение работает нормально, все должно быть гладким, как и должно быть. Но в то время, когда я портировал его на производственный сервер (Linux), процессы перезаписи просто перестали работать.CodeIgniter + mod_rewrite url rewrite error

На первый взгляд мне показалось, что «чувствительность к регистру» файловой системы Linux была vilain. Но после переименования файлов, содержащих ошибки, проблема не устранена.

Дело в том, что. Независимо от того, какой URL я называю, переписывание продолжает вызывать /index.php.

Вот мой .htaccess содержание:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php/$0 [PT,L] 
RewriteRule .\svn\* - [F] 

Структура папок моего приложения является:

doc_root 
    - application 
    -controllers 
     -c.php 

    - .htaccess 
    - index.php 
    (... everything else is codeigniter's default) 
+0

Проверьте мой ответ здесь, это может помочь: http://stackoverflow.com/questions/13326577/remove-index-php-of-codeigniter/13326670#13326670 – Kenzo

+0

Nops ... Эти директивы уже были определены на моем apache/виртуальный хост. – lealhugui

+0

У вас есть загруженный mod_rewrite и что ваш файл htaccess читается? –

ответ

0
<IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteBase/

     RewriteCond %{HTTP_HOST} !^$ 
     RewriteCond %{HTTP_HOST} !^www\. [NC] 
     RewriteCond %{HTTPS}s ^on(s)| 
     RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

     #Removes access to the system folder by users. 
     #Additionally this will allow you to create a System.php controller 
     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

Просто, чтобы сообщить вам, после «RewriteBase /» следующие четыре строки заставят www. - вы можете пропустить эти строки, если не понадобятся. Честно говоря, я уже пробовал «^ (. *) $ Index.php?/$ 1 [L]« Правило (я знаю, что я уже пробовал последние три строки «IfModule» – Kenzo

+0

застрял в этом вопросе в течение пары недель), но попробует снова как можно скорее. Я дам вам знать результаты. – lealhugui

+0

Хорошо ... Я застрял на пару дней, прежде чем это сработало. Я знаю, что это PITA, поэтому, если это не сработает, давайте выясним, как мне отправить вам полный .zip-архив с рабочим пустым приложением. Затем вы можете сравнить файлы, чтобы посмотреть, что это может быть. – Kenzo

0
RewriteBase/
    RewriteCond %{ENV:REDIRECT_STATUS} 200 
    RewriteRule .* - [L] 



#'system' can be replaced if you have renamed your system folder. 
RewriteCond %{REQUEST_URI} ^system.* 
RewriteRule ^(.*)$ /index.php/$1 [L] 


#Rename 'application' to your applications folder name. 
RewriteCond %{REQUEST_URI} ^application.* 
RewriteRule ^(.*)$ /index.php/$1 [L] 


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L,QSA] 

Принимая ответ Kenzo в качестве основы, и копать немного больше , Я появился в конфигурации выше. Он не совсем решил всю проблему сам по себе, но часть переписывания была полностью решена. Вся проблема была вызвана в одной части механизмом перезаписи, не зная, что нужно перенаправить правильно, а другая часть - «чувствительность к регистру» файловой системы. Я не знаю, является ли это лучшим решением, но я создал некоторые символические ссылки на мой главный контроллер и модель, и все сработало нормально. Символы aproach работали, потому что имя моего контроллера было «c.php», поэтому я создал символическую ссылку «C.php», и каждый запрос можно сделать, не беспокоясь о чувствительности к регистру.