web-dev-qa-db-fra.com

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

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 souhaite pouvoir créer un lien vers les images de mon tag 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" />

Cependant 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 un ordinateur 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.

UPDATE: J'ai essayé la suggestion de ZweiBlumen ci-dessous, mais cela n'a pas semblé 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é à ma page de permaliens et cliquez sur Enregistrer. Le résultat de cette opération signifie que mon dossier .htaccess a été réécrit et que le résultat généré est présenté 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 conjointement avec le masquage de l'URL des images.

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

METTRE À JOUR:

Pour tous ceux qui lisent ceci, je viens d'essayer à nouveau et cela a fonctionné en utilisant une combinaison de méthodes de Geerts et de 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 j'ai choisi de le placer dans le fichier .htaccess est que ce fichier est écrasé à chaque fois que je me rends sur la page Admin des permaliens et que je ne veux donc pas l'écraser par accident. J'imagine que je pourrais désactiver cela d'une manière ou d'une autre, mais je ne sais pas comment faire. Les trois réponses ont aidé dans une certaine mesure.

10
dreza

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 extraire cela directement dans un fichier .htaccess, comme dans la réponse de ZweiBlumen, vous devriez choisir cette solution car elle est probablement plus optimisée.

10
Geert

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

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

Vous pouvez également 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.

6
ZweiBlumen

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 utilisez ensuite le shortcode suivant n’importe où dans la zone de contenu.

[img_folder]/img.jpg
<img src="[img_folder]/img.jpg" alt="img" />
4
Joshua Abenazer