Пустые переменные RewriteRule - PullRequest
2 голосов
/ 22 января 2010

У меня есть пара правил переписывания в htaccess. Они работают на одном сервере, но не на другом. Мой сценарий выглядит следующим образом (я прокомментировал, как выглядят URL):

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/images/

#example.com/regions/fife/
RewriteRule ^regions/([A-Za-z0-9\-\+\']+)/?$ /regions.php?region=$1 [L]

#example.com/regions/fife/dunfermline
RewriteRule ^regions/([^/]+)/([^/]+)$ /regions.php?region=$1&town=$2 [L] 

Возвращает две переменные (регион и город), которыми я могу манипулировать в PHP, и выбрасываю соответствующий контент. У меня есть сервер Rackspace, и скрипт отлично работает, но на другом сервере (Freedom2surf) он пока работает только. Он не возвращает переменные. Я получаю пустой массив $ _GET ...

Есть идеи? F2S не дает мне никаких подсказок, просто я должен проверить свой код. Но если он работает на другом сервере, то что дает? Это настройка Apache, которая отличается?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2013

Похоже, у вас конфликт mod_negotiation, и вам нужно отключить Multiviews . Иногда в настройках Apache по умолчанию Multiviews включено по умолчанию. Что он делает, так это смотрит на запрос, скажем, /regions/1234, и mod_negotiation заметит, что существует файл /regions.php, и предположит, что запрос действительно для этого файла php. Таким образом, он будет обслуживать /regions.php/1234 и полностью обходить mod_rewrite. Вы можете использовать Options, чтобы отключить его. Просто добавьте это в начало вашего файла htaccess:

Options -Multiviews
0 голосов
/ 26 ноября 2013

Я думаю, что вы можете следовать за флагом 'QSA', который добавит строку запроса из исходного запроса к перенаправленному запросу, например:

#example.com/regions/fife/
RewriteRule ^regions/([A-Za-z0-9\-\+\']+)/?$ /regions.php?region=$1 [L,QSA]
...