usando unicode no rewriterule

2

Eu usei as seguintes declarações no arquivo .htaccess que contém caracteres utf8 em RewriteRule . O arquivo .htaccess é salvo no bloco de notas com a codificação utf8. Todas as páginas do site são salvas em utf8 e o charset de tudo é utf8.

<IfModule mod_rewrite.c>
RewriteEngine On 
RewriteBase /new/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ /linux-regular.php [L]
</IfModule>

Mas quando eu navego para o URL هاستینگ/هاست-لینوکس-عادی/ , simplesmente recebo o erro Não encontrado.

    
por Fariborz Navidan 02.11.2012 / 15:38

2 respostas

1

RewriteBase /new/
:
RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ /linux-regular.php [L]

O fato de você ter definido um valor específico para o RewriteBase , ainda que tenha especificado um caminho de URL relativo à raiz na RewriteRule substituição , aumenta os alarmes. A diretiva RewriteBase apenas efetua relativa (não inicia com uma barra ou esquema) caminho substituições , portanto, neste caso, ela simplesmente será ignorada - o que eu tenho certeza não é a intenção - caso contrário, não haveria necessidade de defini-lo em primeiro lugar.

Ao remover o prefixo barra na RewriteRule substituição , ele levará em conta o RewriteBase e será reescrito para /new/linux-regular.php . Por exemplo:

RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ linux-regular.php [L]

O que é consistente com o seu comentário mais recente: "... e removido / do início do linux-regular.php e funcionou."

...the special characters will be encoded in %xx hex form

Como: Embora a solicitação deva ser codificada em% (URL codificado), o caminho da URL com o qual o padrão RewriteRule é correspondido é% -decoded (URL decodificado) pelo mecanismo de reescrita. Portanto, usar os caracteres reais (UTF-8) no padrão RewriteRule está correto aqui (ao contrário da outra resposta).

Se você precisava corresponder especificamente ao caminho de URL codificado em%, seria necessário usar uma diretiva RewriteCond e verificar a variável de servidor THE_REQUEST .

    
por 22.10.2017 / 01:55
0

URLs estão "on the wire" codificados em ASCII simples (latin1) - todos os caracteres não ASCII são codificados por clientes (navegadores) em %xx formato hexadecimal ...

Você pode encontrar o seguinte artigo útil.

Para ser mais específico: seu arquivo de configuração do Apache será texto ASCII simples e os caracteres especiais serão codificados em %xx hex form - você pode até traduzi-lo usando uma ferramenta simples disponível na página w3schools acima mencionada.

    
por 02.11.2012 / 18:38