2016-12-09 6 views
0

У меня есть список из нескольких сотен URL-адресов переадресации/перезаписи внутри перезаписи. Большинство URL содержат строки запросов, которые соответствуют определенной записи на карте перезаписи. Я нашел this question о том, как передать строку запроса на карту перезаписи. Я получил эту работу отлично, но теперь проблема заключается в том, что существующая строка запроса добавляется в конец перезаписанного URL-адреса. Например:Удалить строку запроса с конца URL-адреса после прохождения через Rewrite Map

Expected Rewrite: 
/subdir/dir.cfm?categoryID=123 -> https://example.com/subdir/endurl 

Actual Rewrite: 
https://example.com/subdir/endurl?categoryID=123 

Expected Rewrite 
/subdir/dir.cfm?videoID=3422424-131FDDFD-234 -> https://example.com/subdir/awesome/stuff 

Actual Rewrite: 
https://example.com/subdir/awesome/stuff?videoID=3422424-131FDDFD-234 

Это правило перезаписи у меня есть:

RewriteEngine on 

RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,R=301,L] 

Как я могу удалить строку запроса добавляется к URL после переписывания?

EDIT

Я был в состоянии фактически получить эту работу с помощью этого:

RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,C] 
RewriteRule (.*) $1? [L,R=301] 

Однако я не уверен, что если кто-то знает лучший способ добиться того, чего я делаю? Я думаю, что это может сломаться, если мне когда-либо придется перенаправить URL-адрес, содержащий строку запроса, на другой URL-адрес, содержащий строку запроса.

ответ

0

В Apache версии 2.4.0 и более поздних версиях можно использовать [QSD] флаг (Строка запроса Отклонить):

RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [QSD,NC] 

В Apache версии 2.2, нет [QSD] флаг, но если замена URI содержит строка запроса, поведение по умолчанию RewriteRule является выбросит строку запроса, поэтому, просто добавив ? в свое переписывание URI, вы получите тот же эффект:

RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}}? [NC] 

(ваше недавно добавленное правило переписывания фактически использует это функция)

 Смежные вопросы

  • Нет связанных вопросов^_^