Проблема с apache mod_rewrite - PullRequest
       20

Проблема с apache mod_rewrite

0 голосов
/ 23 января 2012

Я пытаюсь переадресовать все входящие запросы на https, за исключением того, что URL содержит / axis2 (http://locatlhost/axis2) в URL. Это то, что я написал (в моем httpd.conf file):

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/axis2$ [NC]
RewriteRule $ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]

Это не работает, и я не могу отладить почему. Может ли кто-нибудь помочь мне.

1 Ответ

1 голос
/ 23 января 2012

Вы настроили отдельный VirtualHost для порта 443?

если да, попробуйте удалить __default__ из директивы VirtualHost в вашей директиве ssl.conf / VirtualHost, установленной ssl.

Что должно выглядеть так:

<VirtualHost _default_:443>

Прежде всего, я бы предложил вам добавить это в ваш VirtualHost. Для регистрации деятельности или mod_rewrite. Это будет полезно для отладки и выше RewriteLogLevel лучше для отладки.

RewriteEngine On
RewriteLog "/path/to/your/rewrite.log"
RewriteLogLevel 3

С RewriteLogLevel Документы :

Чтобы отключить регистрацию действий перезаписи, просто установите Уровень на 0. Это отключит все журналы действий перезаписи. Использование высокого значения для уровня значительно замедлит ваш сервер Apache! Используйте файл перезаписи на уровне выше 2 только для отладки!


Попробуйте это для вашей проблемы:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/?axis2/(?:.*)$ [NC]
RewriteRule ^(.*)(/?axis2/)(.*)$ https://$1$2$3 [L,R=301]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING} [L,QSA,R=301]

Если %{REQUEST_URI} не начинается и не заканчивается /axis2 или axis2/ или /axis2/ или axis2, оно перенаправит ваши URI на https и прекратит дальнейшее переписывание правил.

Иначе, только это выполнит:

RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING} [L,R=301]

R = 301 означает постоянное перенаправление. Если указано только R, будет выполнено временное перенаправление, т. Е. 302.

...