Enmascarar wp-content / themes / name / images solo para el directorio de imágenes usando htaccess

10

Estoy intentando lo que pensé que sería algo realmente simple de enmascarar mi URL, pero parece que no puedo hacer que funcione. Quiero poder vincular imágenes en mi etiqueta img sin tener que escribir la url completa.

es decir

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" />

Sin embargo, en mis páginas solo quiero hacer

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

Sin embargo, nada parece estar funcionando en mi host local. Estoy ejecutando el servidor Apache en una máquina con Windows 7. Estoy tratando de usar un .htaccess para hacer lo que he mencionado anteriormente. Aquí está mi archivo .htaccess en la raíz de mi sitio web.

ACTUALIZACIÓN: Intenté la sugerencia de ZweiBlumen a continuación, pero eso no pareció funcionar. Luego probé la sugerencia de Geerts y agregué el método de reescritura a mi misc.php de mi carpeta de administración. Luego fui a mi página de enlaces permanentes y presioné guardar. El resultado de hacer esto significó que mi carpeta .htaccess fue reescrita y la salida que produjo está debajo.

# 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

Sin embargo, todavía no puedo navegar a mi carpeta de imágenes como:

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

Todo lo que obtengo es una página no encontrada. La sugerencia de Joshua funcionó perfectamente, sin embargo, espero usar esto junto con el enmascaramiento de la URL de las imágenes.

¿Hay algo más que pueda estar haciendo mal o debería verificar?

ACTUALIZAR:

Para cualquiera que lea esto, lo intenté nuevamente y funcionó utilizando una combinación de los métodos Geerts y Joshuas. Parece que mi navegador Firefox ha estado almacenando en caché la página, lo que me hizo pensar que no era así.

La razón por la que hice esto al colocarlo en el archivo .htaccess es que este archivo se sobrescribe cada vez que voy a la página de administración de enlaces permanentes, por lo que no quiero sobrescribir esto por accidente. Supongo que podría desactivar esto de alguna manera, pero no estoy seguro de cómo hacerlo. Las tres respuestas ayudaron hasta cierto punto.

dreza
fuente

Respuestas:

10

Echa un vistazo al tema Roots WordPress . Parecen hacer exactamente lo que quieres con las URL.

Aquí hay un fragmento de su archivo 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: si puede lograr esto directamente en un .htaccessarchivo, como en la respuesta de ZweiBlumen, debe elegir esa solución, ya que lo más probable es que esté más optimizada.

Geert
fuente
1
Aunque no era exactamente lo que estaba buscando, este método terminó poniendo las reglas en .htaccess a través de la página de enlaces permanentes de administrador al guardar. Terminé usando este método junto con el de Joshuas y funciona perfectamente. Gracias por la ayuda.
dreza 01 de
Genial, para el rendimiento también es bueno que pongan las reescrituras en el .htaccess también.
Geert
Creo que este método está perfectamente bien en comparación con codificarlos en su .htaccess. Porque aquí también puedes administrarlo según las funciones de un tema.php y desactivar estas reglas si es necesario.
Jake
Este es en realidad el mejor método para Wordpress. Las reglas de WP Rewrite solo se generan al actualizar la estructura de enlaces permanentes, por lo que lo que está haciendo aquí es esencialmente escribirlo en su .htaccess de todos modos; aunque de una manera más manejable como dice Jake.
pospi
1
Probablemente no debería haber sido wp-content/themescodificado, ya que son objetivos en movimiento. global $wp_theme_directoriespodría usarse para recorrer todos los directorios de temas registrados e identificar el tema actualmente activo. Y WP_CONTENT_DIRpodría usarse para obtener el define()nombre ed del directorio de contenido. De todos modos, +1 en esta respuesta.
kaiser
6

Si el problema es solo con imágenes, pero no con CSS o JavaScript, creo que hay un error tipográfico en su RewriteRule. Creo que te falta un "1" después del "$":

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

Además, puede intentar poner esas declaraciones adicionales debajo de la regla inicial, es decir, debajo de esta línea:

RewriteRule ^index\.php$ - [L]

Aunque no estoy seguro.

ZweiBlumen
fuente
shucks No vi eso. Gracias, lo intentaré.
Dreza
4

¿Por qué no creas un shortcode para eso de la siguiente manera?

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

Y luego use el siguiente shortcode en cualquier parte del área de contenido.

[img_folder]/img.jpg
<img src="[img_folder]/img.jpg" alt="img" />
Joshua Abenazer
fuente
hmmm, me gusta la posibilidad de usar [img_folder] en el área de contenido, aunque realmente solo quería que la url / images no expusiera todo el contenido de wp. Sin embargo, podría considerar combinar esto con la respuesta de Geert y ZweiBlumens si hago eso.
Dreza