Masking wp-content / tema / nama / gambar ke direktori gambar hanya menggunakan htaccess

10

Saya mencoba apa yang saya pikir akan menjadi sesuatu yang sangat sederhana untuk menutupi url saya tetapi tampaknya tidak bisa berfungsi. Saya ingin dapat menautkan ke gambar dalam tag img saya tanpa harus mengetikkan url lengkap.

yaitu

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

Namun pada halaman saya, saya hanya ingin melakukannya

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

Namun sepertinya tidak ada yang berhasil di localhost saya. Saya menjalankan server Apache pada mesin windows 7. Saya mencoba menggunakan .htaccess untuk melakukan apa yang saya sebutkan di atas. Ini file .htaccess saya di root situs web saya.

UPDATE: Saya mencoba saran ZweiBlumen di bawah ini tetapi itu tampaknya tidak berhasil. Saya kemudian mencoba saran Geerts dan menambahkan metode menulis ulang ke misc.php folder admin saya. Saya kemudian pergi ke halaman permalinks saya dan tekan save. Hasil dari hal ini berarti folder .htaccess saya ditulis ulang dan output yang dihasilkan di bawah.

# 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

Namun, saya masih tidak dapat menavigasi ke folder gambar saya seperti:

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

Yang saya dapatkan hanyalah halaman yang tidak ditemukan. Saran Joshua bekerja dengan sempurna namun saya berharap untuk menggunakannya bersamaan dengan menyamarkan URL gambar.

Apakah ada hal lain yang mungkin saya lakukan salah, atau harus diperiksa?

MEMPERBARUI:

Bagi siapa pun yang membaca ini, saya hanya mencoba lagi dan itu berhasil menggunakan kombinasi metode Geerts dan Joshuas. Peramban Firefox saya tampaknya telah melakukan cache halaman yang membuat saya berpikir itu bukan.

Alasan saya melakukannya dengan meletakkannya di file .htaccess adalah bahwa file ini ditimpa setiap kali saya pergi ke halaman Admin permalinks dan jadi saya tidak akan menimpa ini secara tidak sengaja. Saya kira saya bisa mematikan ini entah bagaimana tetapi tidak yakin bagaimana melakukan itu. Ketiga jawaban itu membantu sedikit banyak.

dreza
sumber

Jawaban:

10

Lihatlah Roots WordPress Theme . Mereka tampaknya melakukan apa yang Anda inginkan dengan URL.

Berikut cuplikan dari file root-htaccess.php mereka :

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;
}

Catatan: jika Anda dapat melakukan ini secara langsung dalam .htaccessfile, seperti pada jawaban ZweiBlumen, Anda harus memilih solusi itu karena kemungkinan besar lebih dioptimalkan.

Geert
sumber
1
Meskipun tidak cukup apa yang saya cari metode ini akhirnya menempatkan aturan di. Htaccess melalui halaman admin permalinks setelah save. Saya akhirnya menggunakan metode ini bersamaan dengan Joshuas dan ini bekerja dengan sempurna. Terima kasih untuk bantuannya.
dreza
Keren, untuk kinerja itu hal yang baik mereka meletakkan rewriterules di .htaccess juga.
Geert
Saya akan berpikir metode ini baik-baik saja dibandingkan dengan hard-coding mereka ke dalam .htaccess Anda. Karena di sini Anda juga dapat mengelolanya berdasarkan fungsi theme.php dan mematikan aturan ini jika diperlukan.
Jake
Ini sebenarnya adalah metode terbaik untuk Wordpress. Aturan WP Rewrite hanya dihasilkan ketika memperbarui struktur permalink, jadi apa yang Anda lakukan di sini pada dasarnya adalah menuliskannya ke dalam .htaccess Anda; meskipun dengan cara yang lebih mudah dikelola seperti kata Jake.
pospi
1
Mungkin seharusnya tidak memiliki wp-content/themeskode yang sulit, karena mereka bergerak target. global $wp_theme_directoriesdapat digunakan untuk mengulang semua direktori tema terdaftar dan mengidentifikasi tema yang sedang aktif. Dan WP_CONTENT_DIRbisa digunakan untuk mendapatkan define()nama ed dari dir konten. Bagaimanapun, memberi +1 pada jawaban ini.
kaiser
6

Jika masalahnya hanya dengan gambar, tetapi bukan css atau javascript, saya pikir ada salah ketik di RewriteRule Anda. Saya pikir Anda kehilangan "1" setelah "$":

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

Juga, Anda mungkin ingin mencoba meletakkan pernyataan tambahan di bawah aturan awal, yaitu di bawah baris ini:

RewriteRule ^index\.php$ - [L]

Namun tidak yakin.

ZweiBlumen
sumber
Kampret. tidak melihat itu. Terima kasih saya akan mencobanya.
dreza
4

Mengapa Anda tidak membuat kode pendek untuk itu dengan cara berikut.

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

Dan kemudian gunakan kode pendek berikut di mana saja di area konten.

[img_folder]/img.jpg
<img src="[img_folder]/img.jpg" alt="img" />
Joshua Abenazer
sumber
hmmm, saya suka kemampuan untuk menggunakan [img_folder] di area konten, meskipun saya benar-benar hanya ingin memiliki url / gambar tidak seluruh konten wp terbuka. Namun mungkin melihat menggabungkan ini dengan jawaban Geert dan ZweiBlumens jika saya mendapatkan mereka pergi.
dreza