Mascherare contenuto-wp / temi / nome / immagini nella sola directory delle immagini usando htaccess


10

Sto provando quello che pensavo sarebbe qualcosa di molto semplice per mascherare il mio url ma non riesco a farlo funzionare. Voglio essere in grado di collegarmi alle immagini nel mio tag img senza dover digitare l'URL completo.

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

Comunque sulle mie pagine voglio solo fare

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

Tuttavia, nulla sembra funzionare sul mio localhost. Sto eseguendo il server Apache su una macchina Windows 7. Sto cercando di utilizzare un .htaccess per fare ciò che ho menzionato sopra. Ecco il mio file .htaccess nella radice del mio sito web.

AGGIORNAMENTO: Di seguito ho provato il suggerimento di ZweiBlumen ma non sembra funzionare. Ho quindi provato il suggerimento di Geerts e ho aggiunto il metodo di riscrittura al mio misc.php della mia cartella di amministrazione. Sono quindi andato alla mia pagina dei permalink e ho premuto Salva. Il risultato di ciò significa che la mia cartella .htaccess è stata riscritta e l'output che ha prodotto è inferiore.

# 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

Tuttavia, non riesco ancora a navigare nella cartella delle mie immagini come:

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

Tutto quello che ottengo è una pagina non trovata. Il suggerimento di Joshua ha funzionato perfettamente, tuttavia spero di usarlo insieme al mascheramento dell'URL delle immagini.

C'è qualcos'altro che potrei fare di sbagliato, o dovrei controllare?

AGGIORNARE:

Per chiunque legga questo, ho appena provato di nuovo e ha funzionato usando una combinazione di metodi Geerts e Joshuas. Il mio browser Firefox sembra aver memorizzato nella cache la pagina che mi ha fatto pensare che non lo fosse.

Il motivo per cui ho seguito questo sopra inserendolo nel file .htaccess è che questo file viene sovrascritto ogni volta che vado alla pagina di amministrazione di permalink e quindi non lo sovrascriverò per caso. Immagino di poterlo disattivare in qualche modo, ma non sono sicuro di come farlo. Tutte e tre le risposte hanno aiutato in una certa misura.

Risposte:


10

Dai un'occhiata al tema WordPress di Roots . Sembrano fare esattamente quello che vuoi con gli URL.

Ecco uno snippet dal loro file 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 puoi farlo direttamente in un .htaccessfile, come nella risposta di ZweiBlumen, dovresti scegliere quella soluzione poiché molto probabilmente è più ottimizzata.


1
Anche se non proprio quello che stavo cercando questo metodo ha finito per mettere le regole nel .htaccess tramite la pagina dei permalink dell'amministratore su save. Ho finito per usare questo metodo insieme a quello di Joshuas e funziona perfettamente. Grazie per l'aiuto.
Dreza,

Fantastico, per le prestazioni è una buona cosa mettere anche i riscrittori nel .htaccess.
Geert,

Penso che questo metodo vada benissimo se confrontato con l'hard-coding nel tuo .htaccess. Perché qui puoi anche gestirlo in base alle funzioni.php di un tema e disattivare queste regole se necessario.
Jake,

Questo è in realtà il metodo migliore per Wordpress. Le regole di WP Rewrite sono generate solo quando si aggiorna la struttura dei permalink, quindi quello che stai facendo qui è essenzialmente scriverlo nel tuo .htaccess comunque; anche se in modo più gestibile come dice Jake.
pospi,

1
Probabilmente non avrebbero dovuto essere wp-content/themescodificati, poiché si stanno muovendo obiettivi. global $wp_theme_directoriespotrebbe essere usato per scorrere tutte le directory dei temi registrate e identificare il tema attualmente attivo. E WP_CONTENT_DIRpotrebbe essere utilizzato per ottenere il define()nome ed della directory del contenuto. Comunque, +1 su questa risposta.
Kaiser

6

Se il problema riguarda solo le immagini, ma non CSS o JavaScript, penso che ci sia un refuso nella tua RewriteRule. Penso che manchi un "1" dopo il "$":

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

Inoltre, potresti provare a mettere quelle istruzioni extra sotto la regola iniziale, cioè sotto questa riga:

RewriteRule ^index\.php$ - [L]

Non sono sicuro però.


shucks. non l'ho visto. Grazie, ci proverò.
dreza,

4

Perché non crei uno shortcode per questo nel modo seguente.

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

E quindi utilizzare il seguente shortcode ovunque nell'area del contenuto.

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

hmmm, mi piace la possibilità di usare [img_folder] nell'area del contenuto, anche se volevo davvero solo avere l'URL / images non l'intero contenuto wp esposto. Tuttavia, potrei cercare di combinare questo con la risposta di Geert e ZweiBlumens se riesco a farlo.
dreza,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.