converter URL original em URL amigável

No meu site há um link para os professores registrados. Esse link é algo parecido com isto

http://www.myweb.com/profiles/tutors/index.php?tutorCode=1285&tutorName=Robert%20Sakoo&city=Sidny

Então eu preciso rewrite este link algo assim:

 www.myweb.com/1285/Rober Sakoo 

Alguém pode me dizer se é possível rewrite acima do URL original para o meu URL esperado?

Você parece estar confuso com o funcionamento de URLs e reescritas. A noção de que “preciso rewrite this2 para this1 significa:

  1. Alguém insere this2 na barra de endereço ou clica em um link this2 .
  2. Servidor vê um pedido para this2
  3. O servidor tem um conjunto de regras para rewrite internamente a solicitação de this2 para this1
  4. this1 é servido para o navegador

Observe que o conceito importante em tudo isso é que o navegador solicita o link “this2” e o servidor reescreve internamente a solicitação para “this1” . Mas isso provavelmente não é o que você quer, porque você pegaria as URLs feias e as rewriteia nos URLs bonitos, meio que perdendo o foco de URLs amigáveis.

Com muita freqüência, especialmente por aqui, as pessoas pedem coisas como “Eu quero alterar esse URL para este URL” ou solicitam a reescrita quando há um processo de redirecionamento de duas etapas. Este é o segundo passo (que você não está pedindo de todo), que leva isso1 e redireciona o navegador para this2, de modo que a barra de endereços do URL mude para this2 :

  1. Alguém insere this1 em sua barra de endereço ou clica em um link this1 .
  2. Servidor vê um pedido para this1
  3. O servidor tem um conjunto de regras para redirect externamente o navegador para this2 .
  4. A barra de endereços do navegador agora diz this2
  5. O navegador solicita isso2
  6. Servidor vê um pedido para this2
  7. O servidor tem um conjunto de regras para rewrite internamente a solicitação de this2 para this1
  8. this1 é servido para o navegador

Então, toda essa convolução de round-about é apenas quando o navegador tenta ir para this1 , ele é redirecionado para this2, mas na verdade ainda recebe o conteúdo dele1 .

Então eu suponho que isso deve ser o que você quer. Tente colocar isso no seu arquivo htaccess:

 RewriteEngine On # check if the actual request if for "this1" RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /profiles/tutors/index.php\?tutorCode=([0-9]+)&tutorName=([^&]+)&?([^\ ]+) # redirect to "this2" RewriteRule ^profiles/tutors/index\.php /%1/%2/?%3 [R=301,L,NE] # now rewrite "this2" back to "this1" RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9]+)/(.+)/$ /profiles/tutors/index.php?tutorCode=$1&tutorName=$2 [L,QSA] 

Observe que o parâmetro city nunca está sendo codificado na URL amigável, por isso é deixado como parte da string de consulta. Você pode alterar isso para que a URL seja semelhante a: /id/name/city/ vez de apenas /id/name/ , essa modificação deve ser trivial.

Isso seria em algum lugar perto de:

 RewriteEngine on RewriteRule ^([0-9]+)/(.+)$ /profiles/tutors/index.php?tutorCode=$1&tutorName=$2 [NC,QSA] 

Como você não está especificando o que fazer sobre isso, eu não levei em consideração o parâmetro city , então adicionei o QSA (Query String Append) à regra para que os parâmetros em GET ainda sejam passados ​​para o script.