วิธีใช้เส้นทางสัมพัทธ์ / สัมบูรณ์ใน css URLs?


87

ฉันมีเซิร์ฟเวอร์การผลิตและการพัฒนา ปัญหาคือโครงสร้างไดเร็กทอรี

การพัฒนา:

  • http://dev.com/subdir/images/image.jpg
  • http://dev.com/subdir/resources/css/style.css

การผลิต:

  • http://live.com/images/image.jpg
  • http://live.com/resources/css/style.css

ฉันจะมีโฟลเดอร์style.cssin cssที่ใช้บนเซิร์ฟเวอร์ทั้งสองเส้นทางเดียวกันสำหรับbackground: urlคุณสมบัติได้อย่างไร มีเคล็ดลับที่ฉันสามารถใช้กับเส้นทางสัมพัทธ์ได้หรือไม่

คำตอบ:


130

URL นั้นสัมพันธ์กับตำแหน่งของไฟล์ CSSดังนั้นสิ่งนี้จะเหมาะกับคุณ:

url('../../images/image.jpg')

URL สัมพัทธ์จะย้อนกลับสองโฟลเดอร์จากนั้นไปที่imagesโฟลเดอร์ - ควรใช้ได้กับทั้งสองกรณีตราบใดที่โครงสร้างยังเหมือนกัน

จากhttps://www.w3.org/TR/CSS1/#url :

URL บางส่วนถูกตีความโดยสัมพันธ์กับแหล่งที่มาของสไตล์ชีตไม่สัมพันธ์กับเอกสาร


จะได้ผลหรือไม่ถ้าฉันต้องย้อนกลับไป 2 ขั้นตอน (ปรับปรุงคำตอบ) url (../../ images / image.jpg)?
johnlemon

@anothershrubery - ขออภัยตัวอย่างแรกของฉันมีข้อบกพร่อง
johnlemon

@danip - มันควรจะทำงาน http://domain.com/css/style.cssแต่คุณไม่ได้มีสองขั้นตอนจาก ฉันไม่แน่ใจว่าจะทำอะไรได้บ้างที่นั่น ... แก้ไข: - ใช่มันควรจะทำงานร่วมกับโครงสร้างที่อัปเดตฉันได้อัปเดตคำตอบแล้ว ( ../ดูเหมือนอีกอย่างหนึ่ง)
Kobi

9

ส่วนตัวฉันจะแก้ไขสิ่งนี้ในไฟล์. htaccess คุณควรเข้าถึงสิ่งนั้นได้

กำหนด URL CSS ของคุณดังนี้:

url(/image_dir/image.png);

ในไฟล์. htacess ของคุณให้ใส่:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^image_dir/(.*) subdir/images/$1

หรือ

RewriteRule ^image_dir/(.*) images/$1

ขึ้นอยู่กับเว็บไซต์


2

ฉันมีปัญหาเดียวกัน ... ทุกครั้งที่ฉันต้องการเผยแพร่ css ของฉัน .. ฉันต้องทำการค้นหา / แทนที่ .. และเส้นทางสัมพัทธ์จะใช้ไม่ได้กับฉันเพราะพา ธ สัมพัทธ์แตกต่างจาก dev ไปยังการผลิต

ในที่สุดก็เบื่อที่จะทำการค้นหา / แทนที่และฉันสร้างไดนามิก css (เช่น www.mysite.com/css.php) มันเหมือนกัน แต่ตอนนี้ฉันสามารถใช้ค่าคงที่ php ของฉันใน css บางอย่างเช่น

.icon{
  background-image:url('<?php echo BASE_IMAGE;?>icon.png');
}

และไม่ใช่ความคิดที่ดีที่จะทำให้เป็นแบบไดนามิกเพราะตอนนี้ฉันสามารถบีบอัดโดยใช้ YUI compressor โดยไม่สูญเสียรูปแบบดั้งเดิมบนเซิร์ฟเวอร์ dev ของฉัน

โชคดี!


13
ไม่มีphpแท็กคำถาม! OP อาจไม่ได้ใช้ php เลย
Bazzz

6
เป็นเพียงตัวอย่าง .. คุณสามารถใช้ php, asp, jsp .. ความคิดก็เหมือนกัน
ยินดีด้วยที่

6
มันอาจจะคงที่
jcuenod

3
นอกจากนี้หากอยู่ในไฟล์ CSS <?php **** ?>จะไม่ถูกประมวลผล
JD Vangsness
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.