Estudo de ThinkPHP: Modos de URL

O arquivo de entrada é o único ponto de acesso para a aplicação, e pode haver múltiplos pontos de entrada, onde cada aplicação pode ter seu próprio arquivo de entrada. O sistema analisa os parâmetros da URL para determinar o módulo, controlador e ação solicitados. No ThinkPHP, as distinções entre maiúsculas e minúsculas são consideradas, pois o Linux é sensível a isso. Portanto, módulos, controladores, modelos, etc., devem seeguir a regra de nomenclatura CamelCase.

Se acessarmos diretamente o arquivo de entrada index.php sem especificar módulo, controlador ou ação, o sistema por padrão irá acessar a ação "index" do controlador "Index" no módulo "Home". Assim, os dois métodos de acesso abaixo produzirão o mesmo resutlado:

  1. http://serverName/index.php
  2. http://serverName/index.php/Home/Index/index

Este formato de URL é chamado de modo PATHINFO. O ThinkPHP suporta quatro modos de URL, listados a seguir:

Modo de URL Configuração URL_MODEL
Modo comum 0
Modo PATHINFO 1
Modo REWRITE 2
Modo compatível 3

Se todo o projeto usar o mesmo modo de URL, ele pode ser configurado no arquivo de configuração da aplicação. Se diferentes módulos usarem diferentes modos, esses podem ser definidos em seus respectivos arquivos de configuração. O arquivo de configuração mencionado aqui é geralmente o thinkphp\\Application\\Common\\Conf\\config.php. Cada módulo tem seu próprio arquivo de configuração, como thinkphp\\Application\\Admin\\Conf\\config.php para o módulo Admin e thinkphp\\Application\\Home\\Conf\\config.php para o módulo Home.

Modo comum

O modo comum usa parâmetros GET tradicionais para especificar o módulo, controlador e ação. Exemplo: http://servername/?m=home&c=user&a=login&var=value. Mesmo que o URL_MODEL seja configurado como 1, 2 ou 3, ainda é possível usar este método de passagem de parâmetros via GET. A variável PATH_INFO está definida no arquivo thinkphp\ThinkPHP\Conf\convention.php.

Modo PATHINFO

O modo PATHINFO é o padrão do sistema e oferece o melhor suporte para SEO. O sistema já faz ajustes internos para compatibilidade, portanto, funciona em a maioria dos ambientes de hospedagem. No modo PATHINFO, a URL seria: http://localhost/index.php/home/user/login/var/value/.

Você também pode modificar o separador de parâmetros. Por exemplo, se configurado assim:

'URL_PATHINFO_DEPR' => '_'

Agora, você pode usar sublinhados para separar os parâmetros, como: http://localhost/index.php/home/user_login_var_value/.

Modo REWRITE

O modo REWRITE adiciona suporte a regras de reescrita ao modo PATHINFO, permitindo a remoção do arquivo de entrada (index.php) da URL. Isso requer uma configuração adicional no sevridor web. Para Apache, crie um arquivo .htaccess na mesma pasta do arquivo de entrada, contendo:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

Com isso, a URL pode ser simplificada para: http://localhost/home/user/login/var/value.

Modo compatível

O modo compatível é usado em ambientes que não suportam PATHINFO. A URL neste modo é: http://localhost/?s=/home/user/login/var/value.

Você pode alterar o nome da variável de modo compatível, por exemplo:

'VAR_PATHINFO' => 'pathinfo'

O separador de parâmetros PATHINFO também é válido no modo compatível. Por exemplo, se configurado assim:

'URL_PATHINFO_DEPR' => '-'

A URL pode ser: http://localhost/?s=/home-user-login-var-value.

Para obter o mesmo efeito de URL do modo REWRITE, você pode combinar o modo compatível com regras de reescrita do servidor web. Para Apache, o arquivo .htaccess deve conter:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>

Assim, a URL pode ser acessada como: http://localhost/home/user/login/var/value.

Tags: ThinkPHP URL_MODE PATHINFO REWRITE apache

Publicado em 10-5 01:37