apache - regra de reescrita de string de consulta anexa condição a URL

1

Ao tentar reescrever

site-search.html?searchword=search%20term 

como

advanced-search#q=search%20term

Eu sempre acabo com advanced-search#q=%3Fsearchword%3search%20term

A parte %3Fsearchword%3 é misteriosamente anexada ao URL gerado logo antes do termo de pesquisa.

A regra que tenho em vigor é a seguinte:

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=(.*)$
RewriteRule ^(.*)$ http://www.example.com/advanced-search#q=%1 [R=301,L,NE]

Vale ressaltar que não faz diferença o que eu coloco depois de "q=". O mesmo erro ou uma pequena variação de acontecerá independentemente.

    
por manchine 14.07.2014 / 07:06

2 respostas

1

O% 1 de RewriteRule vem da mesma condição de RewriteRule (. *), e você combina a string de consulta com o próprio URI.

Solução 1: mova ou copie seu padrão no segundo RewriteCond para a condição de RewriteRule.

Com base nos comentários e em uma suposição, o que você gostaria de alcançar, de alguma forma assim:

RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$
RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteRule [?&]searchword=([^&]*) http://www.domain.com/advanced-search#q=%1 [R=301,L,NE]

Solução 2: explore o sinalizador [QSA] de RewriteRule, que acrescenta toda a string de consulta ao uri resultante para você. (não para o Apache 2.2)

    
por 14.07.2014 / 07:15
0

Depois de ajustar o patten para combinar e adicionar um? para o URL de destino, a sintaxe está finalmente funcionando como pretendido.

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=([^&]+)
RewriteRule ^([^&]+) http://www.domain.com/advanced-search?#q=%1 [R=301,L,NE]

O? no URL de destino impede que a string de consulta original seja reapresentada. Se você estiver executando o Apache 2.4, o mesmo resultado pode ser alcançado passando o sinalizador QSD para a regra de reconfiguração.

Além disso, se o URL de destino contiver um # (identificador de fragmento), certifique-se de colocar? antes disso

    
por 16.07.2014 / 04:03