O que essa regra do .htaccess wordpress faz?

2

Nas regras padrão .htaccess para uma instalação subdomínio do WordPress 4.7, estou tentando entender a finalidade de uma regra específica.

Primeiro, apresentarei a regra por conta própria

RewriteRule ^(wp-(content|admin|includes).*) $1 [L]

Em isolamento, para mim, parece que a regra iria simplesmente reescrever qualquer url em wp-content ou wp-admin ou wp-includes em si mesmo. Como ele vem depois das verificações do sistema de arquivos, sabemos que ele não existe no sistema de arquivos, por isso não entendo o que ele está tentando fazer.

Agora aqui está a totalidade do arquivo .htaccess sugerido. A regra é a terceira do final.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

Qualquer insight que alguém possa lançar seria fantástico. Estou recebendo um erro - "A solicitação excedeu o limite de 10 redirecionamentos internos devido ao provável erro de configuração." - sempre que alguém tentar acessar qualquer diretório além do wp-content / que não exista. Eu estaria esperando por um 404 em seu lugar.

Por que vale a pena, este parece ser um problema de longa duração do WP por esse ticket

link

Há sugestões de correções por lá, mas eu gostaria de entender qualquer mudança que implantar lá, já que não será "WP oficial". Estou pensando que entender como essa regra poderia levar a algo que não seja uma auto-reescrita me ajudaria a ter confiança na implementação de uma das alterações sugeridas.

EDITAR: Veja um exemplo da regra sendo aplicada:

[rid#7f58a5a5dcb0/initial/redir#2] [perdir /var/www/wordpress/] applying pattern '^(wp-(content|admin|includes).*)' to uri 'wp-content/invalid_directory/nothing.png'
[rid#7f58a5a5dcb0/initial/redir#2] [perdir /var/www/wordpress/] rewrite 'wp-content/invalid_directory/nothing.png' -> 'wp-content/invalid_directory/nothing.png'
[rid#7f58a5a5dcb0/initial/redir#2] [perdir /var/www/wordpress/] add per-dir prefix: wp-content/invalid_directory/nothing.png -> /var/www/wordpress/wp-content/invalid_directory/nothing.png
[rid#7f58a5a5dcb0/initial/redir#2] [perdir /var/www/wordpress/] trying to replace prefix /var/www/wordpress/ with /
[rid#7f58a5a5dcb0/initial/redir#2] strip matching prefix: /var/www/wordpress/wp-content/invalid_directory/nothing.png -> wp-content/invalid_directory/nothing.png
    
por Joe Flowers 30.06.2017 / 01:18

1 resposta

0
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]

Acho que a principal intenção dessa diretiva é impedir o processamento posterior do arquivo (ou seja, impedir que a solicitação seja encaminhada para o front controller: index.php ) ao solicitar uma URL que inicie /wp-content , /wp-admin ou /wp-includes .

Ao reescrever a si mesmo, o URL passa inalterado e o processamento é interrompido.

No entanto, a substituição resultante também é relativa , portanto, o que for indicado como RewriteBase também será prefixado ao URL reescrito. Nesse caso, o RewriteBase é simplesmente / , portanto, ele é reescrito para ele mesmo na primeira passagem (supondo que esse arquivo .htaccess esteja na raiz do documento). Suponho que isso deve ser intencional, caso contrário, eles teriam usado um hífen ( - ) como a substituição , como na diretiva acima.

Isso "não deve" resultar em um loop de reescrita, já que o processamento deve parar se a URL passar inalterada (a reescrita é essencialmente "ignorada").

No entanto, para ter certeza de que não foi alterado, você poderia simplesmente substituir $1 por - na RewriteRule substituição .

Se você habilitar a depuração completa de reescrita, por exemplo. LogLevel rewrite:trace6 na configuração do servidor no Apache 2.4+ você deve ver exatamente o que está acontecendo, já que deve mostrar cada iteração da reescrita.

    
por 30.06.2017 / 02:03