как пропустить RewriteRule, если REQUEST_URI - это конкретный каталог.Это проект CodeIgniter - PullRequest
3 голосов
/ 27 октября 2011

У меня есть проект CodeIgniter, работающий на CentOS, с успешно установленным сертификатом EV.

Я не хочу использовать SSL при доступе к каталогу / rss. У меня это работало, но я как-то сломал его во время обновления.

Вот мой файл .htaccess, который я считаю правильным:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # redirect to SSL connection
    RewriteCond %{REQUEST_URI} !^/rss/
    RewriteCond %{SERVER_PORT} 80
#   R=301 sends HTTP Moved Permanently L=Last rule for this request
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]


    #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> 

Заходя на сайт, URL-адрес корректно меняется на https://www.site.com Но переход на www.site.com/rss также меняется на https. Я не хочу использовать ssl для этого каталога. Я думаю, что файл .htaccess правильный, так что, возможно, это вещь CodeIgniter ... Если бы у кого-нибудь была идея, я был бы очень признателен.

1 Ответ

4 голосов
/ 27 октября 2011

Может случиться так, что mod_dir не вмешивается в том же порядке, что и раньше (mod_dir по умолчанию будет перенаправлять, если вы обращаетесь к каталогу, но не включаете косую черту, на тот же URL-адрес с косая черта). Если вы попытаетесь получить доступ к http://www.site.com/rss RewriteCond %{REQUEST_URI} !^/rss/ совпадениям (так как запрос uri начинается с "/ rss"! = "/ Rss /") и переписывается в https://www.site.com/rss., тогда mod_dir вступает во владение и перенаправляет вас на "https://www.site.com/rss/". Возможно, что перед обновлением mod_dir сначала применил перенаправление, чтобы вы перенаправились на" http://www.site.com/rss/", затем первое условие (! ^ / rss /) не выполняется, поэтому вы не переписываетесь на https://

Попробуйте изменить первое условие перезаписи на:

RewriteCond %{REQUEST_URI} !^/rss/?$

Таким образом, URI, такие как "/ rss" и"/ rss /", потерпят неудачу в совпадении и не будут перенаправлены на https://

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...