2016-01-08 2 views
1

ОбзорMod Rewrite 500 Сервер проблема Ошибка

Я пытаюсь переписать:

  • http://www.foo.com/bar к безопасной версии https://www.foo.com/bar, затем
  • https://www.foo.com/bar к https://www.foo.com/index.php?location=bar

Мои index.php страница просто выводит $_GET переменных.

Код

.htaccess:

RewriteEngine On 
RewriteBase/
RewriteRule ^https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent] 
RewriteRule ^([^/]*)$ /?location=$1 [L] 

index.php:

<?php print_r($_GET); exit; ?> 

Выпуск

  1. Если я посещаю www.foo.com/bar, я вижу ошибку сервера .
  2. Если я прокомментирую правило для обработки переменной «location» $_GET и зайдите в foo.com, он не перенаправляет на защищенную версию сайта.

Обновление

.htaccess:

RewriteEngine on 

# if https is off (it is on) 
#RewriteCond %{HTTPS} off 
RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 

# If the request is not for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/?$ ?location=$1 [L,QSA] 

Посещение следующие результаты в ошибке петли переадресации:

  • www.foo.com/bar
  • www.foo.com/index.php?location=bar
  • www.foo.com/?location=bar
  • www.foo.com?location=bar

Однако, если я закомментируйте эту строку:

RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 

страница загружается, как и ожидалось:

Array ([location] => bar)

Это заставляет меня верить ТНА Проблема заключается в перенаправлении HTTPS, как я могу это решить?

+0

* "Если я посещаю foo.com/bar"* - вы можете быть более конкретным? как в случае, если вы используете 'http: // foo.com/bar' или' http: // www.foo.com/bar', это 2 разных животных. Выполнение 'foo.com/bar' в веб-браузере будет по умолчанию' http: // foo.com/bar' вместо 'http: // www.foo.com/ bar' –

+0

@ Fred-ii- I ' я изменил свой вопрос. – Ben

ответ

3

Это правило проблема:

RewriteRule ^https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent] 

Как синтаксисом

RewriteRule matching-pattern target [flags] 

Кроме того, необходимо RewriteCond оба правила, чтобы избежать правил организации циклов.

Вы можете это исправить, заменив код с:

DirectoryIndex index.php 
RewriteEngine on 

# if https is off 
RewriteCond %{HTTPS} off 
RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 

# If the request is not for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/?$ ?location=$1 [L,QSA] 
+0

Спасибо за ваше объяснение; первое правило теперь работает, однако, если я нахожусь на странице «https: // www.foo.com/bar», я получаю сообщение об ошибке «ERR_REDIRECT_LOOP», говоря, что слишком много перенаправлений? – Ben

+0

'/ bar' не является реальным каталогом, и нет других правил. – Ben

+0

Спасибо за помощь. Я понял, что это правило перезаписи https вызывает цикл переадресации - если я прокомментирую эту строку, страница загружается точно, что я ожидаю – Ben