2016-11-02 2 views
0

Я использую Helicon Ape на Windows Server для создания файлов htaccess.Удалить скобки из htaccess (Helicon Ape)

Первоначально, часть более широкого набора условий, я установил это условие для возврата 403, если url содержал(). Однако это является причиной ложных срабатываний в случае Mailchimp кодов отслеживания, которые в конечном итоге получить завернутый в()

RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR] 

Например, в приведенной ниже URL

http://domain.com/page/11/page-name?ct=t(Newsletter_Tracking)

В качестве альтернативы я пытался удалить скобки и перенаправить на «очищенную версию».

Я пробовал несколько разных вещей, которые я нашел в SO, но никто не работал.

До сих пор ближе всего, что я мог добраться до работы заключается в следующем:

RewriteCond %{REQUEST_URI} [\(\)]+ [OR] 
RewriteCond %{QUERY_STRING} [\(\)]+ 
RewriteRule ^(.*)[\(]+([^\)]*)[\)]+(.*)$ $1$2$3 [R=301,L] 

Проблема с выше код, который работает, если() были в URL, но не запрос строка. Он не перенаправляет и не очищает запрос.

Так что это будет работать: http://domain.com/page/11/pag(e-name)

, но это не так: http://domain.com/page/11/page-name?ct=t(Newsletter_Tracking)

Ваша помощь ценится

Спасибо.

ответ

1

Вы можете использовать следующее правило:

RewriteCond %{THE_REQUEST} /page/11/page-name\?ct=t\(Newsletter_Tracking\)\sHTTP [NC] 
RewriteRule^%{REQUEST_URI}? [L,R] 

Если строки запроса является динамическим, попробуйте:

RewriteCond %{THE_REQUEST} /page/11/page-name\?ct=.+\(.+\)\sHTTP [NC] 
RewriteRule^%{REQUEST_URI}? [L,R] 
+0

Спасибо. Однако это слишком специфично, что может вызвать проблемы. Я придумал рабочее решение, увидев использование REQUEST_URI в ПРАВИЛЬНОМ – imvain2

1

Используя пример @starkeen «s, я был в состоянии создать рабочее решение.

Этот код обрабатывает строку запроса отдельно от URL-адреса. Он очищает URL-адрес, но удаляет строку запроса.

RewriteCond %{REQUEST_URI} [\(\)]+ 

RewriteRule ^(.*)[\(]+([^\)]*)[\)]+(.*)$ $1$2$3 [R=301,L] 

RewriteCond %{QUERY_STRING} [\(\)]+ 

RewriteRule^%{REQUEST_URI}? [R=301,L]