กำบัง wp-content / themes / name / images ไปที่ไดเร็กทอรี images โดยใช้ htaccess


10

ฉันพยายามในสิ่งที่ฉันคิดว่าจะเป็นอะไรที่เรียบง่ายจริงๆที่ปิดบัง URL ของฉัน แต่ดูเหมือนจะไม่สามารถใช้งานได้ ฉันต้องการลิงก์ไปยังรูปภาพในแท็ก img ของฉันโดยไม่ต้องพิมพ์ URL เต็ม

กล่าวคือ

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

อย่างไรก็ตามในหน้าของฉันฉันต้องการทำ

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

ดูเหมือนว่าจะไม่มีอะไรทำงานบน localhost ของฉัน ฉันใช้เซิร์ฟเวอร์ Apache บนเครื่องที่ใช้ Windows 7 ฉันกำลังพยายามใช้. htaccess เพื่อทำสิ่งที่ฉันได้กล่าวไว้ข้างต้น นี่คือไฟล์. htaccess ของฉันในรูทของเว็บไซต์ของฉัน

อัปเดต: ฉันลองใช้คำแนะนำ ZweiBlumen ด้านล่าง แต่ดูเหมือนจะไม่ทำงาน ฉันลองใช้คำแนะนำ Geerts และเพิ่มวิธีการเขียนใหม่ไปยัง misc.php ของฉันในโฟลเดอร์ admin ของฉัน จากนั้นฉันไปที่หน้า Permalinks ของฉันแล้วกดบันทึก ผลลัพธ์ของการทำเช่นนี้หมายความว่าโฟลเดอร์. htaccess ของฉันถูกเขียนใหม่และผลลัพธ์ที่ผลิตออกมาอยู่ด้านล่าง

# 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

อย่างไรก็ตามฉันยังไม่สามารถนำทางไปยังโฟลเดอร์รูปภาพได้เช่น:

http: //localhost/images/myimage.jpg

ทั้งหมดที่ฉันได้รับคือไม่พบหน้า ข้อเสนอแนะของโจชัวทำงานได้อย่างสมบูรณ์แบบ แต่ฉันหวังว่าจะใช้สิ่งนี้ร่วมกับปิดบังภาพ URL

มีอะไรอีกที่ฉันอาจจะทำผิดหรือควรตรวจสอบ?

UPDATE:

สำหรับทุกคนที่อ่านสิ่งนี้ฉันเพิ่งลองอีกครั้งและใช้งานได้กับการผสมผสานระหว่าง Geerts และ Joshuas เบราว์เซอร์ Firefox ของฉันดูเหมือนจะแคชหน้าซึ่งทำให้ฉันคิดว่าไม่ใช่

เหตุผลที่ฉันไปกับสิ่งนี้มากกว่าวางไว้ในไฟล์. htaccess ก็คือไฟล์นี้จะถูกเขียนทับทุกครั้งที่ฉันไปที่หน้าผู้ดูแลระบบ permalinks และดังนั้นฉันจะไม่เขียนทับสิ่งนี้โดยไม่ตั้งใจ ฉันเดาว่าฉันสามารถปิดสิ่งนี้ได้ แต่ไม่แน่ใจว่าจะทำอย่างไร คำตอบทั้งสามช่วยในระดับหนึ่ง

คำตอบ:


10

ตรวจสอบรากเวิร์ดเพรสธีม พวกเขาดูเหมือนจะทำสิ่งที่คุณต้องการกับ URL

นี่เป็นตัวอย่างข้อมูลจากไฟล์root-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;
}

หมายเหตุ: หากคุณสามารถดึงสิ่งนี้ออกได้โดยตรงใน.htaccessไฟล์เช่นเดียวกับคำตอบของ ZweiBlumen คุณควรเลือกวิธีการแก้ปัญหานั้นเพราะมันอาจจะเหมาะที่สุด


1
แม้ว่าจะไม่ใช่สิ่งที่ฉันกำลังมองหาวิธีการนี้ก็จบลงด้วยการวางกฎใน. htaccess ผ่านหน้าผู้ดูแลระบบ permalinks เมื่อบันทึก ฉันได้ใช้วิธีนี้ร่วมกับของ Joshuas และใช้งานได้อย่างสมบูรณ์แบบ ขอบคุณสำหรับความช่วยเหลือ
dreza

เยี่ยมมากสำหรับการแสดงมันเป็นสิ่งที่ดีที่พวกเขาใส่ rewriterules ใน. htaccess ด้วย
Geert

ฉันคิดว่าวิธีนี้ใช้ได้ดีมากเมื่อเทียบกับการเขียนโค้ดลงใน. htaccess ของคุณ เพราะที่นี่คุณสามารถจัดการได้โดยใช้ฟังก์ชั่นของธีมและปิดกฎเหล่านี้หากจำเป็น
เจค

นี่เป็นวิธีที่ดีที่สุดสำหรับ Wordpress กฎของ WP Rewrite จะถูกสร้างขึ้นเฉพาะเมื่ออัปเดตโครงสร้าง Permalinks ดังนั้นสิ่งที่คุณทำที่นี่คือการเขียนลงใน. htaccess เป็นหลัก แม้ว่าจะเป็นแบบที่จัดการได้มากขึ้นอย่างที่ Jake พูด
pospi

1
อาจไม่ควรมีwp-content/themesรหัสที่ยากเนื่องจากมันเป็นเป้าหมายเคลื่อนที่ global $wp_theme_directoriesสามารถใช้เพื่อวนซ้ำไดเรกทอรีไดเรกทอรีที่ลงทะเบียนทั้งหมดและระบุธีมที่ใช้งานในปัจจุบัน และWP_CONTENT_DIRสามารถใช้เพื่อรับdefine()ชื่อ ed ของเนื้อหา dir อย่างไรก็ตาม +1 คำตอบนี้
ไกเซอร์

6

หากปัญหาเกิดขึ้นกับรูปภาพเท่านั้น แต่ไม่ใช่ css หรือ javascript ฉันคิดว่ามีการพิมพ์ผิดใน RewriteRule ของคุณ ฉันคิดว่าคุณพลาด "1" หลังจาก "$":

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

นอกจากนี้คุณอาจต้องการลองวางคำสั่งพิเศษเหล่านั้นใต้กฎเริ่มต้นเช่นใต้บรรทัดนี้:

RewriteRule ^index\.php$ - [L]

ไม่แน่ใจว่า


แย่จัง ไม่เห็นว่า ขอบคุณฉันจะให้มันไป
dreza

4

ทำไมคุณไม่สร้างรหัสย่อสำหรับสิ่งนั้นในลักษณะดังต่อไปนี้

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

จากนั้นใช้รหัสย่อต่อไปนี้ที่ใดก็ได้ในพื้นที่เนื้อหา

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

อืมฉันชอบความสามารถในการใช้ [img_folder] ในพื้นที่เนื้อหาแม้ว่าฉันอยากจะมีเพียง / ภาพเท่านั้นไม่ได้เปิดเนื้อหา wp-content ทั้งหมด อย่างไรก็ตามอาจดูการรวมสิ่งนี้กับ Geert's และ ZweiBlumens ตอบถ้าฉันทำให้คนเหล่านั้นไป
dreza
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.