Masquer wp-content / themes / name / images dans le répertoire des images uniquement à l'aide de htaccess

10

J'essaie ce que je pensais être quelque chose de très simple de masquer mon URL, mais je n'arrive pas à le faire fonctionner. Je veux pouvoir créer un lien vers des images dans ma balise img sans avoir à taper l'URL complète.

c'est à dire

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

Mais sur mes pages je veux juste faire

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

Cependant, rien ne semble fonctionner sur mon hôte local. J'exécute le serveur Apache sur une machine Windows 7. J'essaie d'utiliser un .htaccess pour faire ce que j'ai mentionné ci-dessus. Voici mon fichier .htaccess à la racine de mon site web.

MISE À JOUR: J'ai essayé la suggestion de ZweiBlumen ci-dessous mais cela ne semble pas fonctionner. J'ai ensuite essayé la suggestion de Geerts et ajouté la méthode de réécriture à mon misc.php de mon dossier admin. Je suis ensuite allé sur ma page de permaliens et j'ai sauvegardé. Le résultat de cette opération signifie que mon dossier .htaccess a été réécrit et la sortie qu'il a produite est ci-dessous.

# 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

Cependant, je ne peux toujours pas accéder à mon dossier d'images tel que:

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

Tout ce que je reçois est une page introuvable. La suggestion de Joshua a parfaitement fonctionné mais j'espère l'utiliser en conjonction avec le masquage de l'URL des images.

Y a-t-il autre chose que je pourrais faire de mal, ou devrais-je vérifier?

METTRE À JOUR:

Pour tous ceux qui lisent ceci, je viens de réessayer et cela a fonctionné en utilisant une combinaison de méthodes Geerts et Joshuas. Mon navigateur Firefox semble avoir mis en cache la page, ce qui me faisait penser que ce n'était pas le cas.

La raison pour laquelle je suis allé plus loin en le mettant dans le fichier .htaccess est que ce fichier est écrasé chaque fois que je vais sur la page Admin des permaliens et donc je ne veux pas l'écraser par accident. Je suppose que je pourrais désactiver cela d'une manière ou d'une autre, mais je ne sais pas comment faire cela. Les trois réponses ont aidé dans une certaine mesure.

dreza
la source

Réponses:

10

Découvrez le thème WordPress Roots . Ils semblent faire exactement ce que vous voulez avec les URL.

Voici un extrait de leur fichier 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;
}

Remarque: si vous pouvez retirer cela directement dans un .htaccessfichier, comme dans la réponse de ZweiBlumen, vous devriez choisir cette solution car elle est probablement plus optimisée.

Geert
la source
1
Bien que ce ne soit pas tout à fait ce que je cherchais, cette méthode a fini par mettre les règles dans le .htaccess via la page des permaliens d'administration lors de l'enregistrement. J'ai fini par utiliser cette méthode en conjonction avec celle de Joshuas et cela fonctionne parfaitement. Merci pour l'aide.
dreza
Cool, pour la performance, c'est une bonne chose qu'ils mettent les réécritures dans le .htaccess aussi.
Geert
Je pense que cette méthode est parfaitement adaptée à leur codage en dur dans votre .htaccess. Parce qu'ici, vous pouvez également le gérer en fonction du fichier functions.php d'un thème et désactiver ces règles si nécessaire.
Jake
C'est en fait la meilleure méthode pour Wordpress. Les règles de WP Rewrite sont générées uniquement lors de la mise à jour de la structure des permaliens, donc ce que vous faites ici est essentiellement de l'écrire dans votre .htaccess; quoique d'une manière plus gérable comme le dit Jake.
pospi
1
wp-content/themesIls n'auraient probablement pas dû être codés en dur, car ils déplacent des cibles. global $wp_theme_directoriespourrait être utilisé pour parcourir tous les répertoires de thèmes enregistrés et identifier le thème actuellement actif. Et WP_CONTENT_DIRpourrait être utilisé pour obtenir le define()nom ed du répertoire de contenu. Quoi qu'il en soit, +1 sur cette réponse.
kaiser
6

Si le problème ne concerne que les images, mais pas css ou javascript, je pense qu'il y a une faute de frappe dans votre RewriteRule. Je pense que vous manquez un "1" après le "$":

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

En outre, vous voudrez peut-être essayer de placer ces instructions supplémentaires sous la règle initiale, c'est-à-dire sous cette ligne:

RewriteRule ^index\.php$ - [L]

Pas sûr cependant.

ZweiBlumen
la source
shucks. n'a pas vu ça. Merci, je vais essayer.
dreza
4

Pourquoi ne créez-vous pas un shortcode pour cela de la manière suivante.

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

Et puis utilisez le shortcode suivant n'importe où dans la zone de contenu.

[img_folder]/img.jpg
<img src="[img_folder]/img.jpg" alt="img" />
Joshua Abenazer
la source
hmmm, j'aime la possibilité d'utiliser le [img_folder] dans la zone de contenu, même si je ne voulais vraiment que l'url / images et non la totalité du contenu wp exposé. Cependant, je pourrais envisager de combiner cela avec la réponse de Geert et ZweiBlumens si je les mets en marche.
dreza