Jump to content
  • 0

Rewrite в .htaccess при наличии QUERY_STRING


digga
 Share

Question

update: Ответ я нашёл, но родился другой вопрос (в следующем сообщении)

Поиск не помог мне ответить на этот вопрос, так что обращаюсь к вам.

Есть сайт собранный с применением SSI, может он и не лучшим образом собран, но работал.

И тут я озаботился редиректом с www.digga на просто digga

В .htaccess добавил

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.digga\.ru$ [NC]
RewriteRule ^(.*)$ http://digga.ru/$1 [R=301,L]

Он работает в 90% работает.

10% выпало на ссылки с QUERY_STRING

Имя файла вставляемого в шаблон

Silnoe Koldunstvo.bg.shtml

В шаблоне следующий код:

			<!--#if expr="$QUERY_STRING" -->
<!--#include virtual="$QUERY_STRING.bg.shtml" -->
<!--#else -->
<!--#include virtual="spisok.bg.shtml" -->
<!--#endif -->

Ссылка оформлена как:

<A href="bg/bg.shtml?Silnoe Koldunstvo">Сильное Колдунство.</a>

в адресной строке выводится:

http://digga.ru/bg/bg.shtml?Silnoe%20Koldunstvo

А теперь фокус! Если кто-то заходит с

www.digga.ru/bg/bg.shtml?Silnoe%20Koldunstvo

то после Rewrite "%" превратится в "%25" и в адресную строку попадёт

http://digga.ru/bg/bg.shtml?Silnoe%2520Koldunstvo

Что естественно не работает.

Подскажите, пожалуйста, как с этим бороться или хотя бы, что гуглить.

Сразу замечу, что страница вся на HTML + SSI больше ничего не используется.

Edited by digga
Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Извиняюсь, что отвлекал.

На свежую голову открыл для себя флаг NE,

так что вот такой код сработал

RewriteRule ^(.*)$ http://digga.ru/$1 [R=301,L,NE]

Другой вопрос.


<!--#set var="temp" value="$QUERY_STRING"-->
<!--#if expr="${QUERY_STRING}=/../" -->
<!--#include virtual="news/n$QUERY_STRING.shtml" -->
<!--#elif expr="${QUERY_STRING}=/fanclub/" -->
<!--#include virtual="$QUERY_STRING.shtml" -->
<!--#else -->
<h1><font color="#800000">Вас приветствует Дигга на Digga.ru</font></h1>
<!--#include virtual="news/n..2012-01-17.shtml" -->
<!--#endif -->

Файл fanclub.shtml лежит в корне.

Запрос

http://digga.ru/index.shtml?fanclub

Приводит к

[an error occurred while processing this directive]

Хотя пустой запрос

http://digga.ru/index.shtml?

или

http://digga.ru/index.shtml?..2012-01-17

будут работать корректно.

Если есть наверно что-то, что я не понимаю, так что буду признателен за любую помощь.

Link to comment
Share on other sites

  • 0

ошибка в записи:

<!--#elif expr="${QUERY_STRING}=/fanclub/" -->

может в этом проблема?

Пока я так и не понял где ошибка,

но зато откопал, что я, сам того не зная, использую "regular expressions".

Штука интересная, плохо что из порядка 25-30 сайтов, что я облазил по SSI, ни на одном не было упоминания о "regular expressions".

А стоило бы, т.к. без этого SSI теряет ряд привлекательных черт.

Link to comment
Share on other sites

  • 0

а если присмотреться elif?

Я медленно вхожу в ступор...

<!--#elif expr="${QUERY_STRING}=/fanclub/" -->

Я базируюсь на link

<!--#if expr="test_condition" -->

<!--#elif expr="test_condition" -->

<!--#else -->

<!--#endif -->

Или я что-то важное упускаю.

Link to comment
Share on other sites

  • 0

Я медленно вхожу в ступор...

прошу прощения, просто ssi не очень знаком и мне показалось дикостью вместо elseif писать elif :facepalmxd:

тогда умываю руки, еще раз ссори за холивар :)

UPD: единственное что нашел, но только на инглише и кажется там говорится о том, что подключаемый файл должен находиться на одном уровне с файлом в котором вызывается это подключение: http://www.yourhtmlsource.com/sitemanagement/includes.html

может и не так понял, если че английский знаю плохо :)

Link to comment
Share on other sites

  • 0

мне показалось дикостью вместо elseif писать elif

В питоне, например, так всё и пишется — через elif:


if a==1:
# do something
elif a==2:
# do something else
else:
# another actions

так что не дикость ни разу

Link to comment
Share on other sites

  • 0

UPD: единственное что нашел, но только на инглише и кажется там говорится о том, что подключаемый файл должен находиться на одном уровне с файлом в котором вызывается это подключение: http://www.yourhtmlsource.com/sitemanagement/includes.html

может и не так понял, если че английский знаю плохо :)

Спасибо за участие, хотя это и не помогло, т.к оба файла находятся в одной директории.

Продолжаю поиски, прям мистика какая-то. Чувствую "истина где-то рядом" ©.

Link to comment
Share on other sites

  • 0

так что не дикость ни разу

питон? не, не слышал )))

возьму себе на заметку, спасибо.

Спасибо за участие, хотя это и не помогло, т.к оба файла находятся в одной директории.

да было бы за что..., это так сказать моральная компенсация за мою безграмотность в отношении некоторых языков :)

удачи в поисках.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy