Pergunta

Eu estou olhando para reescrever urls com múltiplos substrings. Uma substring está sendo solicitada como um subdiretório, enquanto quaisquer outros são solicitados como parâmetros normais cadeia de consulta.

Por exemplo, eu gostaria de reescrever urls a partir

http://www.mysite.com/mark/friends?page=2

para

http://www.mysite.com/friends.php?user=mark&page=2

Eu sou capaz de fazer isso com a exceção do caractere ponto de interrogação. Aqui é a minha regra de reescrita:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]

Se eu mudar o ponto de interrogação para qualquer outro personagem que funciona muito bem. Parece que o problema é que o '? personagem está sendo interpretada incorretamente como o início de uma nova cadeia de consulta.

Eu preciso passar quaisquer parâmetros que aparecem após / user / amigos como é. Como faço para conseguir isso?

Foi útil?

Solução

Você deve estar usando a bandeira [QSA] em vez de tentar reescrever a string de consulta. [QSA] passa na cadeia de consulta ao URL reescrito.

Assim, a regra deve ser parecido:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]

Seu caso é muito semelhante ao o exemplo dado para usar a bandeira QSA na mod_rewrite livro de receitas .

Outras dicas

O consulta não é parte do caminho URL e, portanto, não pode ser processados ??com a directiva RewriteRule . Isso só pode ser feito com a RewriteCond directiva (%{QUERY_STRING} ver ).

como Chad Birch já disse -lo sufixos th definir o QSA bandeira para obter automaticamente o original solicitado consulta anexada ao novo URL.

Além de usar a bandeira reescrita QSA, você também pode usar a variável de ambiente QUERY_STRING como mostrado abaixo:

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}

E a URL em questão

http://www.example.com/mark/friends?page=2

será reescrito para (conforme especificado):

http://www.example.com/friends.php?user=mark&page=2
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top