2016-11-23 3 views
0

У меня есть простое приложение Flask, я изменил конфигурационный файл Apache, чтобы включить .htaccess, и я предполагаю, что файл просматривается Apache, когда я пишу «Deny from all «в .htaccess я получаю страницу« Запрещено ». Это заставляет меня думать, что я должен иметь ошибку где-то в синтаксисе. Я провел много часов, пытаясь разного RegEx, но безрезультатно.mod rewrite правило не будет работать - apache .htaccess

Я хотел бы, чтобы преобразовать текущий URL:

http://example.com/average_temperatures?city1=istanbul&city2=ankara&city3=london

Для этого формата:

http://example.com/average_temperatures/istanbul/ankara/london

Это содержание моего .htaccess:

RewriteEngine On 

RewriteRule ^average_temperatures/([^/.]+)/([^/.]+)/([^/.]+)/?$ average_temperatures?city1=$1&city2=$2&city3=$3 [L] 

Может кто-нибудь указать меня в правильном направлении, что может быть здесь? Я ценю любые намеки. Спасибо.

+0

Просмотрите файл журнала ошибок http-серверов, чтобы убедиться, что ошибка не выбрана. Затем включите запись перезаписи, это позволит вам понять, что происходит внутри вашего механизма перезаписи. – arkascha

+0

Проанализируйте шаблон замещения RewriteRule: "average_temperatures **. Ext **? City1 = $ 1 & city2 = $ 2 & city3 = $ 3" ​​вы пропустили расширение файла (**. Php ** или **. Jsp **) файла, для которого вы передаете параметры get (значения строки запроса) –

+0

Эй, страница генерируется приложением Flask, поэтому я предполагаю, что расширение просто «.html» (хотя оно не отображается в URL), но я попробовал его (average_temperatures.html? City1 = $ 1 & city2 = $ 2 & city3 = $ 3 [L]), но он все еще не работает. –

ответ

0

Используйте этот прекрасный сайт для отладки вашего правила htaccess: http://htaccess.madewithlove.be/ - соответственно, ваше правило совпадает. Таким образом, проблема - это что-то еще. (Может быть, вы missunderstood цель URL-переписывает?)

Ваше правило отлично переписывает ВНЕШНЕЕ запрос

http://weather-averages.co.uk/average_temperatures/istanbul/ankara/london 

к

http://weather-averages.co.uk/average_temperatures?city1=istanbul&city2=ankara&city3=london 

Имейте в виду, что это правило не применяется для ссылок вы размещаете внутри своего html. Вы должны изменить <a href=""> с до целевой SEO-Url, вы хотите, чтобы обеспечить:

<a href="http://weather-averages.co.uk/average_temperatures/istanbul/ankara/london"> 

затем будет переписан, так что вы следующий $_GET -Array в наличии:

$_GET = array (
    "city1" => "istanbul", 
    "city2" => "ankara", 
    "city3" => "london" 
); 

пс .: В вашем правиле переписывания вам не хватает расширения - возможно, это ваша проблема?

average_temperatures?city1=$1&city2=$2&city3=$3 [L] 
average_temperatures.php?city1=$1&city2=$2&city3=$3 [L] 
+0

Hi Dognose, Я надеялся, что у меня была ошибка в RegEx, которая была бы легко исправить, но по мере совпадения правила и .htaccess я боюсь, что проблема будет где-то глубже. Не могли бы вы пояснить, что вы подразумеваете под «внешним запросом»? Извините, если этот вопрос звучит глупо, но я только начинаю, и это мой первый проект для хобби. Кроме того, он не должен переписываться из/istanbul/ankara в? City1 = Istanbul & city2 = Ankara &, но наоборот, верно? Это приложение Flask с динамически сгенерированным контентом, и я попытался добавить «.html» к правилу, но он тоже не работал. –

+0

@scott_m Кажется, ваше замешательство связано с перепиской URL.Ваш сервер просто понимает ОДИН язык: это стиль '? City = 1 & city = 2'. Но вы хотите, чтобы ваши посетители увидели стиль '/ ankara/istanbul' (это то, что я называю« внешним »URL). Таким образом, ваш htaccess должен перевести запрос посетителей (внешний url) на то, что ваш сервер может понять ('?' -style). Поэтому он должен ТОЧНО переписать этот путь. – dognose

+0

@scott_m Это довольно конфуция, я знаю: по умолчанию это '? Mode = xy'. Итак, можно предположить, что для перезаписи url необходимо изменить '? Mode = xy' на'/xy', но он работает наоборот, всегда в «направлении запроса»: вызовы посетителей '/ xy' - so, htaccess необходимо сделать из этого '' mode = xy', поэтому ваш сервер может это понять. – dognose