Como o WordPress cria URLs que o Apache conhece?


17

Quando você cria uma página no WordPress, é apenas uma entrada em uma tabela de banco de dados; não há arquivo real nesse local. No entanto, eu mesmo posso criar um arquivo nesse local e ele roubará a página do WordPress. Eu apago o arquivo e ele volta à página do WordPress.

Só estou curioso sobre como isso é alcançado. Presumivelmente, alguma comunicação está acontecendo entre o WordPress e o Apache (?).

Respostas:


27

Na verdade, não há comunicação entre o Apache e o WordPress. A "mágica" está acontecendo nas mod_rewriteregras do Apache .

Para uma instalação padrão do WordPress, você tem as seguintes regras em .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Observe esta linha: RewriteRule . /index.php [L] Aqui, estamos dizendo ao Apache para redirecionar internamente qualquer solicitação de URL para /index.php.

A menos que: esta linha:RewriteCond %{REQUEST_FILENAME} !-fse torne falsa. Isso significa que, ao adicionar issoRewriteCondcom o exposto acimaRewriteRule, estamos dizendo ao Apache para enviar todas as solicitações/index.php, mas não se for um arquivo existente .

Além disso, quando esta linha:RewriteCond %{REQUEST_FILENAME} !-dse tornar falsa. Isso significa que, ao adicionar issoRewriteCondcom o exposto acimaRewriteRule, estamos dizendo ao Apache para enviar todas as solicitações/index.php, mas não se for um diretório existente .

Portanto, no final, a menos que seja um arquivo ou diretório existente, o Apache está enviando internamente todas as outras solicitações para /index.php.

Então, como você vê, nenhuma comunicação está acontecendo entre o Apache e o WordPress. O Apache está decidindo tudo sozinho e estamos dizendo para fazer isso usando RewriteRulee RewriteConddiretivas.

Leia mais sobre mod_rewriteAQUI .


3
Isso é ótimo. Eu entendo perfeitamente. Examinei o arquivo .htaccess padrão várias vezes e nunca me preocupei em analisá-lo. Obrigado!
18717 Matt

Esse é um padrão de design chamado front controller. Observe que ele redireciona todos os URLs inexistentes para index.php, isso significa que se você digitar o caminho completo para o seu arquivo functions.php, o frontcontroller não funcionará e o site exibirá o arquivo functions.php. É por isso que muitas vezes você vai ver os arquivos plugin e tema WordPress começar comif ( !defined(‘ABSPATH’)) exit;
Sjors Ottjes

Sim, eu vi isso em plugins, mas não entendi sua finalidade. Portanto, se !defined(‘ABSPATH’)avaliado como verdadeiro, significa que algo diferente do WordPress está tentando acessar o script (porque o ABSPATH está definido em wp-config.php) e, portanto, deve ignorar essa solicitação. Isso está correto?
19417 Matt

@matt Está correto. Embora eu não diria isso "algo diferente do WordPress". Como você pode definir ABSPATHem qualquer outro script PHP, também permitirá outros scripts em seu próprio servidor. O que não permitirá é o acesso direto a esse arquivo de fora do seu servidor (por exemplo, do navegador). Porque, ao acessar esse arquivo diretamente, os usuários não conseguem definir ABSPATH.
Fayaz

É realmente bom saber disso. Eu sempre me preocupo com a segurança e poderei tirar proveito disso imediatamente. Obrigado!
19417 Matt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.