Mascarando wp-content / themes / name / images no diretório apenas imagens usando htaccess

10

Estou tentando o que pensei que seria algo realmente simples de mascarar meu URL, mas não consigo fazê-lo funcionar. Quero poder vincular imagens na minha tag img sem precisar digitar o URL completo.

ie

Current url:  http://server.com/wp-content/themes/standard/images/img.jpg
or
<img src = "http://server.com/wp-content/themes/standard/images/img.jpg" />

No entanto, nas minhas páginas eu quero apenas fazer

<img src="http://server.com/images/img.jpg" />

No entanto, nada parece estar funcionando no meu host local. Estou executando o servidor Apache em uma máquina Windows 7. Estou tentando usar um .htaccess para fazer o que mencionei acima. Aqui está o meu arquivo .htaccess na raiz do meu site.

ATUALIZAÇÃO: Tentei a sugestão do ZweiBlumen abaixo, mas isso não pareceu funcionar. Tentei a sugestão de Geerts e adicionei o método de reescrita ao meu misc.php da minha pasta de administração. Fui então para a minha página de links permanentes e cliquei em salvar. O resultado disso fez com que minha pasta .htaccess fosse reescrita e a saída produzida abaixo.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^css/(.*) /wp-content/themes/standard/css/$1 [QSA,L]
RewriteRule ^js/(.*) /wp-content/themes/standard/js/$1 [QSA,L]
RewriteRule ^images/(.*) /wp-content/themes/standard/images/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

No entanto, ainda não consigo navegar para minha pasta de imagens, como:

http: //localhost/images/myimage.jpg .

Tudo o que recebo é uma página não encontrada. A sugestão de Joshua funcionou perfeitamente, mas espero usá-la em conjunto com o mascaramento do URL das imagens.

Existe algo mais que eu possa estar fazendo de errado ou que deva verificar?

ATUALIZAR:

Para quem lê isso, tentei novamente e funcionou usando uma combinação dos métodos Geerts e Joshuas. Meu navegador Firefox parece estar em cache a página que estava me fazendo pensar que não estava.

O motivo pelo qual eu coloquei isso ao colocá-lo no arquivo .htaccess é que esse arquivo é substituído toda vez que eu vou para a página de Administradores permalinks e, portanto, não o substituo por acidente. Eu acho que eu poderia desligar isso de alguma forma, mas não sei como fazer isso. Todas as três respostas ajudaram até certo ponto.

dreza
fonte

Respostas:

10

Confira o Roots WordPress Theme . Eles parecem fazer exatamente o que você deseja com os URLs.

Aqui está um trecho do arquivo roots-htaccess.php :

add_action( 'generate_rewrite_rules', 'roots_add_rewrites' );

function roots_add_rewrites($content) {
  $theme_name = next( explode( '/themes/', get_stylesheet_directory() ) );
  global $wp_rewrite;
  $roots_new_non_wp_rules = array(
    'css/(.*)' => 'wp-content/themes/' . $theme_name . '/css/$1',
    'js/(.*)'  => 'wp-content/themes/' . $theme_name . '/js/$1',
    'img/(.*)' => 'wp-content/themes/' . $theme_name . '/img/$1',
  );
  $wp_rewrite->non_wp_rules += $roots_new_non_wp_rules;
}

Nota: se você pode fazer isso diretamente em um .htaccessarquivo, como na resposta do ZweiBlumen, você deve escolher essa solução, pois provavelmente é mais otimizada.

Geert
fonte
11
Embora não fosse exatamente o que eu estava procurando por esse método, acabamos colocando as regras no .htaccess através da página de permalinks do administrador ao salvar. Acabei usando esse método em conjunto com o de Joshuas e funciona perfeitamente. Obrigado pela ajuda.
dreza
Legal, para o desempenho, é bom que eles também reescrevam o acesso .htaccess.
Geert
Eu acho que esse método é perfeitamente adequado se comparado a codificá-los no seu .htaccess. Porque aqui você também pode gerenciá-lo com base no functions.php de um tema e desativar essas regras, se necessário.
27412 Jake
Este é realmente o melhor método para o Wordpress. As regras do WP Rewrite são geradas apenas durante a atualização da estrutura de links permanentes; portanto, o que você está fazendo aqui é essencialmente gravando-o no seu .htaccess; embora de uma maneira mais gerenciável, como diz Jake.
pospi
11
Provavelmente não deveria ter sido wp-content/themescodificado, pois estão movendo alvos. global $wp_theme_directoriespode ser usado para percorrer todos os diretórios de temas registrados e identificar o tema atualmente ativo. E WP_CONTENT_DIRpode ser usado para obter o define()nome do diretório de conteúdo. Enfim, +1 nesta resposta.
Kaiser #
6

Se o problema for apenas com imagens, mas não com css ou javascript, acho que há um erro de digitação no seu RewriteRule. Eu acho que você está faltando um "1" após o "$":

RewriteRule ^images/(.*)$ wp-content/themes/standard/images/$1 [L]

Além disso, você pode tentar colocar essas instruções extras abaixo da regra inicial, ou seja, abaixo desta linha:

RewriteRule ^index\.php$ - [L]

Não tenho certeza.

ZweiBlumen
fonte
shucks. não vi isso. Obrigado, vou tentar.
dreza
4

Por que você não cria um código de acesso para isso da seguinte maneira.

function img_folder_shortcode( ) {
   return get_stylesheet_directory_uri() . '/images';
}
add_shortcode( 'img_folder', 'img_folder_shortcode' );

E use o seguinte código de acesso em qualquer lugar da área de conteúdo.

[img_folder]/img.jpg
<img src="[img_folder]/img.jpg" alt="img" />
Joshua Abenazer
fonte
hmmm, eu gosto da capacidade de usar o [img_folder] na área de conteúdo, apesar de realmente querer apenas ter o URL / images não todo o conteúdo wp exposto. No entanto, pode parecer combinar isso com a resposta de Geert e ZweiBlumens, se eu conseguir isso.
dreza