RedirectMatch e Query String

4

Compare esses dois RedirectMatch's. O primeiro não funciona:

RedirectMatch 302 ^/redirect\.php[?]page=(.+)$ http://somewhereelse.com/$1

Versus isso, que redirecionará para o link :

RedirectMatch 302 ^/redirect\.php([?]page=.+)?$ http://somewhereelse.com/$1

O RedirectMatch corresponde apenas ao URI e não à string de consulta? A documentação do Apache é um pouco vaga nesta área. O que estou tentando fazer é extrair o parâmetro de consulta page e redirecionar para outro site usando-o.

Isso é possível com RedirectMatch ou eu tenho que usar RewriteCond + RewriteRule ?

    
por nate 19.04.2013 / 17:14

2 respostas

7

Não é possível usar RedirectMatch neste caso, infelizmente; a string de consulta não faz parte da string de URL com a qual o RewriteMatch é comparado.

O segundo exemplo funciona porque a string de consulta enviada pelo cliente é reaplicada ao URL de destino. Assim, a correspondência opcional não corresponde a nada, a substituição $1 é uma string vazia, mas a string de consulta original do cliente está presa de volta.

Em vez disso, será necessária uma RewriteCond check contra o %{QUERY_STRING} .

RewriteCond %{QUERY_STRING} page=([^&]+)
RewriteRule ^/redirect\.php$ http://somewhereelse.com/%1? [R=302,L]
    
por 21.04.2013 / 08:57
0

De acordo com a documentação, corresponde a URL:

The supplied regular expression is matched against the URL-path

link

Every URL consists of the following: the scheme name (commonly called protocol), followed by a colon, two slashes, then, depending on scheme, a server name (exp. ftp., www., smtp., etc.) followed by a dot (.) then a domain name (alternatively, IP address), a port number, the path of the resource to be fetched or the program to be run, then, for programs such as Common Gateway Interface (CGI) scripts, a query string, and an optional fragment identifier.

link (seção Sintaxe)

Você pode fazer isso com o RewriteRule

    
por 19.04.2013 / 17:37

Tags