2010-06-13 38 views
10

मुझे .htaccess के साथ कठिन समय हो रहा है। मैं एक साइट मैं पर काम कर रहा हूँ के लिए अनुकूल यूआरएल बनाने के लिए चाहते हैं ...मैं .htaccess के साथ दोस्ताना यूआरएल कैसे बना सकता हूं?

मूल रूप से मैं इस परिवर्तित करना चाहते हैं: इस में

http://website.com/index.php?ctrl=pelicula&id=0221889 
http://website.com/index.php?ctrl=pelicula&id=0160399&tab=posters 

:

http://website.com/pelicula/0221889/ 
http://website.com/pelicula/0221889/posters/ 

मामले में मैं इसे की जरूरत है

http://website.com/pelicula/0221889/the-article-name/ 
http://website.com/pelicula/0221889/the-article-name/posters/ 
नहीं

: बाद में मैं भी (मैं PHP का उपयोग कर रहा) इस तरह URL के अंत में लेख का शीर्षक जोड़ने के बारे में जानना चाहते हो ई: Stackoverflow विधि को भी मेरे लिए अच्छा है, उदाहरण के लिए इस सवाल का यूआरएल है:

http://stackoverflow.com/questions/3033407/htacces-to-create-friendly-urls-help-needed 

लेकिन आप id के बाद कुछ भी डाल सकते हैं और यह भी काम करेंगे। इस तरह:

http://stackoverflow.com/questions/3033407/just-anything-i-want 

मैं .htacces फ़ाइल बनाने के लिए कुछ स्वत: वेब उपकरण का इस्तेमाल किया है, लेकिन इसकी सही ढंग से काम नहीं कर रहा। तो मैं आपकी मदद के लिए पूछता हूं।

मैं भी खुशी है कि यदि आप .htacces श्रेष्ठ व्यवहार और सुझावों की सिफारिश कर सकते हो जाएगा ..

संपादित करें: कुछ उत्तरों के आधार पर मैं यहाँ मिल मैं इस डाल:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^/([^/]+)/([^/]+)/?([^/]*)/?$ index.php?ctrl=$1&id=$2&tab=$3 [QSA,L] 
</IfModule> 

लेकिन मैं मिलता है डिफ़ॉल्ट मेजबान 'पृष्ठ नहीं मिला' त्रुटि।

मैं भी करने की कोशिश की:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^([^/]+)/(\d+)/([^/]+)/?$ index.php?ctrl=$1&id=$2&tab=$3 [QSA,L] 
    RewriteRule ^([^/]+)/(\d+)/?$   index.php?ctrl=$1&id=$2 [QSA,L] 
    RewriteRule ^([^/]+)/?$    index.php?ctrl=$1 [QSA,L] 
</IfModule> 

यह भी काम नहीं करता। यह मुझे मेरे डिफ़ॉल्ट 404.php पृष्ठ पर ले जाता है।

mod_rewrite सक्षम और काम कर रहा है।

सहायता!

+0

http://stackoverflow.com/questions/2569725/getting-two-variables-in-the-url-with-htaccess/2569734#2569734 http://stackoverflow.com/questions/2088804/htaccess- भ्रमित-साफ-यूआरएल/2088854 # 2088854 http://stackoverflow.com/questions/2549408/needs-some-help-with-an-apache-mod-rewrite-issue/2549688#2549688 ... –

+1

यह देखने के लिए कि आपका क्या यूआरएल को फिर से लिखा जा रहा है, index.php के शीर्ष पर $ _GET को प्रतिबिंबित करने या डीबग करने के लिए पुनः लिखने के लॉग का उपयोग करने का प्रयास करें। http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog – cam8001

+0

क्या आप 'वास्तव में' सुनिश्चित हैं कि पुनर्लेखन ठीक से काम कर रहा है? बुरी तरह से कॉन्फ़िगर अपाचे कॉन्फ़िगरेशन फ़ाइलों के साथ एक बार मुझे वही समस्याएं थीं। http://www.webune.com/forums/how-to-test-check-if-mod-rewrite-is-enabled-t40.html ने वास्तव में मुझे – DrColossos

उत्तर

6

http://website.com/ के लिए दस्तावेज़ जड़ में मैं इस तरह एक htaccess फ़ाइल डाल चाहते हैं:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

फिर अपने PHP स्क्रिप्ट में आप $_GET['url'] चर आप के रूप में हेरफेर कर सकते हैं करें:

$path_components = explode('/', $_GET['url']); 
$ctrl=$path_components[0]; 
$id=$path_components[1]; 
$tab=$path_components[2]; 
+0

मुझे इसका उपयोग करने के लिए सभी वेब एप्लिकेशन बदलने की जरूरत है? मेरा मतलब है, मुझे हर एक पेज में सभी $ _GET को बदलने की ज़रूरत है? – Jonathan

+1

@ जोनाथन: नहीं, यह उसका पूरा बिंदु है! आपके पास index.php पृष्ठ में केवल वह कोड होगा। फिर index.php यह तय कर सकता है कि $ _GET चर – nico

+0

के आधार पर आवश्यक पृष्ठ (ओं) को क्या करना है और 'शामिल करें' इसे फ्रंट कंट्रोलर पैटर्न कहा जाता है और यह जाने का तरीका IMHO है। –

0

पहले एक अपनी .htaccess फाइल को संभालने जड़ में है:

RewriteRule ^([a-zA-Z]+)/([0-9]+)(/)?$ index.php?ctrl=$1&id=$2 

दूसरा:

RewriteRule ^([a-zA-Z]+)/([0-9]+)/posters(/)?$ index.php?ctrl=$1&id=$2&tab=posters 
:

RewriteRule ^([a-zA-Z]+)/([0-9]+)/([a-zA-Z]+)(/)?$ index.php?ctrl=$1&id=$2&tab=$3 

या अगर यह अलग टैब के बजाय posters हमेशा

मैंने (/)? जोड़ा जो इसका मतलब होना चाहिए कि यूआरआई के साथ काम करेगा या साथ टी पीछे स्लैश।

दूसरे के लिए मैं शायद अंत में लेख को अंत में रखता हूं ताकि फिर से लिखना या /value जोड़ सकें ताकि पुनः लिखना टैब और आलेख के बीच का अंतर जानता हो या रेगेक्स से डैश को बाहर कर सके।

+0

बहुत मदद की, यह एकमात्र पंक्ति है जिसे मुझे अंदर रखना है htacces फ़ाइल? – Jonathan

0

करने के लिए यह यूआरएल है:

http://website.com/pelicula/0221889/posters 

इस पर पुनः लिखा गया:

http://website.com/index.php?ctrl=pelicula&id=0221889&tab=posters 

मैं यह कर जाएगा:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^/([^/]+)/([^/]+)/?([^/]*)/?$ index.php?ctrl=$1&id=$2&tab=$3 [QSA,L] 
</IfModule> 

यदि आप आईडी के बाद शीर्षक रखना चाहते हैं और यह अंतिम स्थिति में टैब चर जा रहा है की वजह से हर समय करते हैं, चुनने के लिए: आप को पता है अगर यह संख्या 3 या नंबर 4. होने वाला है आप ऐसा करते हैं है:

RewriteRule ^/([^/]+)/([^/]+)/?([^/]*)/?([^/]*)$ index.php?ctrl=$1&id=$2&tab=$4 [QSA,L] 

तीसरे कोष्ठक पर कब्जा कर लिया है, और इसलिए कुछ भी हो सकते हैं।

आशा में मदद करता है कि

+0

मैंने इसे .htacces फ़ाइल में रखा है लेकिन यह काम नहीं कर रहा है, कोई विचार क्यों? – Jonathan

+0

ठीक है, आपको किस राजा का राजा मिलता है? क्या आपके पास mod_rewrite सक्षम है? – jfoucher

+0

हाँ, सबकुछ सक्षम है। यह सिर्फ पृष्ठ नहीं मिला .. – Jonathan

7

बस इस स्थानीय रूप से परीक्षण किया है और यह है कि तुम क्या जरूरत है क्या लगता है:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^([^/.]+)(?:/)?$ /index.php?ctrl=$1 [L] 
    RewriteRule ^([^/.]+)/([^/.]+)(?:/)?$ /index.php?ctrl=$1&id=$2 [L] 
    RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)(?:/.*)?$ /index.php?ctrl=$1&id=$2&tab=$3 [L] 
</IfModule> 

यह यह क्या करता है:

ये पुनर्लेखन के साथ या स्लैश के बिना काम करेंगे - अगर तुम उन्हें, केवल बिना स्लेश काम पहले दो पुनर्लेखन के अंत से (?:/)? निकालना चाहते हैं। आप आवश्यकतानुसार पिछली स्लैश जोड़ने या निकालने के लिए mod_rewrite का भी उपयोग कर सकते हैं।

+0

यह मेरे वेब होस्ट पर काम नहीं कर रहा है। मुझे यह त्रुटि मिलती है: आंतरिक सर्वर त्रुटि। सर्वर को एक आंतरिक त्रुटि या गलत कॉन्फ़िगरेशन का सामना करना पड़ा और आपका अनुरोध पूरा करने में असमर्थ था। कोई विचार? – Jonathan

+0

सभी पुनर्लेखन नियमों पर index.php के सामने से स्लैश को हटाने का प्रयास करें। – cam8001

+0

मैंने स्लेश, एक ही त्रुटि को हटा दिया।मुझे लगता है कि यह एक वाक्यविन्यास त्रुटि हो सकती है क्योंकि जब मैंने 'jfoucher' द्वारा प्रदान किए गए कोड को आजमाया तो मुझे यह समस्या नहीं मिली ... – Jonathan

0

सुनिश्चित करें कि आपके पास कोई अन्य साइट नहीं है। Htaccess फ़ाइल निर्देशिका पेड़ पर उच्च है जो आपकी साइट के .ttaccess से विवादित है।

0

मैं अपने .htaccess फ़ाइल

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* rewrite.php [L] 

असल में इस का उपयोग करता है, तो यह एक फ़ाइल या निर्देशिका, उपयोग rewrite.php के रूप में मौजूद नहीं है और वह यह है कि यही कारण है कि मेरा मानना ​​है कि पार्स करने यूआरएल आदि की देखभाल करते हैं सबसे बुनियादी तरीका जिसे आप फिर से लिख सकते हैं।आप /var/www/domain/index.php के बजाय /var/www/domain/www/index.php को writiting किया जा सकता है

0

आधारित:

इसके अलावा, var_dump($_SERVER) के परिणाम (कहीं आप काम करता है पता है) करता है, तो क्या आपको लगता है सर्वोच्च निर्देशिका वास्तव में सर्वोच्च निर्देशिका, जैसे है यह देखने के लिए बाहर की जाँच अनुभव पर, मैं आपकी यूआरआई योजना को समायोजित करने की सिफारिश करता हूं ताकि आप यूआरआई को केवल नियम लागू कर सकें जिन्हें आप फिर से लिखे गए हैं। उदाहरण के लिए

Convert इस:

http://website.com/index.php?ctrl=pelicula&id=0221889 
http://website.com/index.php?ctrl=pelicula&id=0160399&tab=posters 
इस में

(मैं शब्द "सामान" डाल दिया है, लेकिन यह वास्तव में कुछ का वर्णन करता है कि आप क्या लगता है, यानी "दुकान" या "संभावना है होना चाहिए पुस्तकालय "या जो कुछ भी इस सामग्री है):

RewriteEngine on 
RewriteRule ^stuff/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?ctrl=$1&id=$2&tab=$3 [L,NC,QSA] 
RewriteRule ^stuff/([^/\.]+)/([^/\.]+)/?$ index.php?ctrl=$1&id=$2 [L,NC,QSA] 
:

http://website.com/stuff/pelicula/0221889/ 
http://website.com/stuff/pelicula/0221889/posters/ 

इस लक्ष्य को हासिल करने के लिए, आप एक .htaccess फाइल जो निम्न नियमों को शामिल अपनी वेबसाइट के शीर्ष-स्तरीय फ़ोल्डर में डाल दिया जाएगा

पते के "सामान" भाग (कुछ उचित नाम दिया गया) होने के बाद, आप गलती से अन्य संपत्तियों जैसे कि छवियों, सीएसएस में शामिल और पुन: जावास्क्रिप्ट को फिर से लिखना नहीं होगा।

एक तरफ ध्यान दें के रूप में, आप उल्लेख किया है:

This also does not work. It takes me to my default 404.php page.

अपने 404 त्रुटि पुनर्निर्देशन कहाँ घोषित किया जाता है?

0

RewriteRule^सामान /([^/.]+)/([^/.]+)/([^/.]+)/?$ index.php? Ctrl = $ 1 & आईडी = 2 $ & टैब = $ 3 [एल, एनसी, क्यूएसए] रिवाइट्रूल^सामग्री /([^/.]+)/([^/.]+)/?$ index.php? Ctrl = $ 1 & आईडी = $ 2 [एल, एनसी, क्यूएसए]

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