2015-01-13 5 views
5

मैं चाहता हूँ कि जब URL में उपयोगकर्ता इनपुट http://example.com/abc/123/jon/ वास्तव में इस फाइल को http://example.com/abc.php?id=123&name=jon दिखाने जाता है और यह आसानी से htaccess फ़ाइल में इन पंक्तियों को जोड़ने के द्वारा किया जा सकता है है:.htaccess रीवाइट्रूल भी मेरे सीएसएस, जेएस और छवियों फ़ाइलों को फिर से लिखना। इन्हें कैसे अनदेखा करें?

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=$1&name=$2 [L] 

लेकिन होने मेरी abc.php फ़ाइल कुछ (सीएसएस, जे एस) फ़ाइलें:

<link href="css/style.css" rel="stylesheet"> 
<script src="js/jquery-1.10.2.js"></script> 

और की तरह छवियों: img/logo.png

लेकिन मेरे .htaccess फाइल की वजह से यह style.css यहाँ खोज कर रहा है: http://example.com/abc/123/jon/css/style.css के बजाय 0 और इसी तरह जेएस और छवियों के लिए।

मैंने पहले से ही कई समान उत्तरों की कोशिश की है, लेकिन उनमें से कोई भी मेरे लिए काम नहीं कर रहा है। मैं इसके लिए htaccess समाधान ढूंढ रहा हूं।

+1

क्रॉस – Pinoniq

+0

से शुरू होने वाली फ़ाइलों को देखने के लिए ब्राउज़र को बताने के लिए सीएसएस और जेएस को पहले/पहले जोड़ें, हाँ यह काम कर रहा है लेकिन मुझे यह एक .htaccess समाधान नहीं चाहिए। –

+0

http://stackoverflow.com/a/3701958/3492835 देखें। @ पिनोनीक सही है। – Xatoo

उत्तर

9

आपको लगता है कि उपयोग कर सकते हैं:

RewriteEngine on 
# not rewrite css, js and images 
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC] 
RewriteRule ^abc/(.+)/(.+)/ abc.php?id=$1&name=$2 [L] 

# rewrite css, js and images, from root 
RewriteRule ^abc/[^/]+/[^/]+/(.+)$ $1 [L] 

तो अपने अंतिम सीएसएस (या js) निर्देशिका जड़ में नहीं है, आप पिछले $1 से पहले पथ जोड़ सकते हैं। अब यह है: /css/style.css/abc/xxx/yyy/css/style.css साथ

+0

यह आपको बहुत धन्यवाद @Choises धन्यवाद। –

+0

आपका स्वागत है, खुशी है कि यह काम किया। – Croises

+0

आम तौर पर आपको ऐसा करने की आवश्यकता नहीं है यदि 'css /' 'abc /' के समान फ़ोल्डर में है। लेकिन महत्वपूर्ण बात यह है कि यह काम करता है। मैं आपको एचटीएमएल का उपयोग करने की सलाह देता हूं: '> जब यह संभव हो। लेकिन मुझे लगता है कि आपने अपना संदेश हटा दिया है ... – Croises

2

बस RewriteRule एक पंक्ति से पहले जोड़ें:

RewriteCond %{REQUEST_FILENAME} !-f 

इसका मतलब यह है कि अगर मौजूदा फ़ाइल आपके अनुरोध uri अंक, फिर अगले RewriteRule नहीं होगा ट्रिगर।

यदि आप चाहते हैं अन्य तरीके से तो यह एक करना चाहिए:

RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg)$ 

आप अधिक एक्सटेंशन ध्रुव से अलग कर दिया जोड़ सकते हैं (|)

+1

काम नहीं कर रहा है, लेकिन आपकी कोशिश के लिए धन्यवाद। –

+0

आप ऐसा नहीं कर सकते हैं, क्योंकि ये वर्चुअल निर्देशिका में वास्तविक फ़ाइलें नहीं हैं। – Croises

+0

यह ठीक काम करता है। हालांकि, अगर यह काम नहीं कर रहा है तो आप पाएंगे कि फ़ाइल नामों की बात आने पर कई वेब सर्वरों पर, वे केस संवेदनशील होते हैं। उदाहरण के लिए यदि आपका कोड किसी फ़ाइल को "sitenavigation.php" के रूप में संदर्भित कर रहा है और फ़ाइल को "siteNavigation.php" कहा जाता है, तो फिर से लिखने से फ़ाइल को गायब माना जाएगा और इसलिए इसे फिर से लिखना होगा। – John

-1

@Croises द्वारा जवाब सही है लेकिन मैं अपने पूर्ण जोड़ने के लिए DOMAIN_URL से पहले $ 1

तो अंतिम उत्तर है:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC] 
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=$1&name=$2 [L] 
RewriteRule ^abc/[^/]+/[^/]+(/.+)$ http://example.com/$1 [L] 
+0

यह केवल अद्यतन, सारांश और अंतिम उत्तर के लिए है, मैंने पहले ही आपका उत्तर स्वीकार कर लिया है और आपको क्रेडिट भी देता है। –

+0

आपको 'example.com //' के बाद 2 x '/' के साथ एक त्रुटि है बाएं रेगेक्स से पहले .... – Croises

संबंधित मुद्दे