2013-03-27 3 views
0

Платформа: Windows 7 Pro 64 битHtaccess RewriteRule не случасе

У меня есть Apache 2.2 установка на моей машине развития (в основном установки WAMP). У меня есть несколько сайтов, основанных на Code Igniter, в основных htdocs. Тем не менее, я застрял в обработке case для подкаталогов в основном каталоге htdocs.

Вот где у меня возникли проблемы с .htaccess (находится в директории/CILearn под HTDOCS):

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

Суб каталог CILearn под HTDOCS. Таким образом, URL выглядит следующим образом:

localhost/CILearn 
    localhost/CILearn/site 
    localhost/cilearn 

Теперь это работает и «сайт» представляет собой контроллер так редирект для index.php работает.

Это не работает:

localhost/cilearn/site 

Может кто-то пожалуйста, объясните, где эти правила должны и почему он не обрабатывает случай?

+0

Прошу прощения. Оказывается, это проблема с CodeIgniter. Оказывается, используя: $ config ['uri_protocol'] = 'PATH_INFO'; вместо: $ config ['uri_protocol'] = 'AUTO'; Это то, что нужно. Таким образом, это действительно имеет мало общего с правилами перезаписи для Apache. Поэтому я хочу спросить модераторов. Должен ли я удалить этот вопрос или изменить его? – Demolishun

ответ

1

удалить

RewriteBase /CILearn/ 

и проверить его снова увидеть эту страницу http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase для получения дополнительной информации о RewriteBase

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /CILearn/index.php/$1 [NC,L] 
+0

Где вы размещаете .htaccess? Я просто попробовал это без RewriteBase, и я все еще получаю ту же ошибку: http: // localhost/cilearn/site – Demolishun

+0

@Demolishun Я положил htaccess на root и создал папку 'CILearn' и создал' index.php' на нем –

+0

I попробовал переместить его в корневой «htdocs», и это не сработало. Самое смешное, что я включил запись Rewrite в Apache, и он действует так же, как и на тех же путях. Так что, возможно, переписывать это нормально, но есть ошибка где-то в другом месте. – Demolishun

1

Это может произойти, когда ваши системные пути к файлам чувствительны к регистру. У вас есть два варианта.

Использование mod_speling в корневой директории .htaccess (не /CILearn/.htaccess)

CheckSpelling on 
CheckCaseOnly on 

mod_speling Убедитесь, что активирован с чем-то вроде

LoadModule speling_module /path/to/apache2/modules/mod_speling.dll 

В качестве альтернативы, вы можете добавить RewriteRule фиксирующий чехол для cilearn. Это должно быть сделано в корневом каталоге .htaccess

RewriteEngine on 
RewriteRule ^cilearn/(.*) /CILearn/$1 [NC,L] 
+0

@faa Вам не нужно 'RewriteBase', пока вы заменяете абсолютные URL-адреса. Так что да, вы можете удалить его, но это тоже не повредит. –