सिंह पर ~ / साइटों में .htaccess फ़ाइलों का उपयोग करके URL पुनर्लेखन (mod_rewrite) सक्षम करें


13

मुझे सिंह पर काम करने के लिए mod_rewrite नहीं मिल सकता है। मैं .htaccess फ़ाइलों का उपयोग करके, स्थानीय रूप से, ~ / साइट्स में कई वेबसाइटों को विकसित कर रहा हूं। मैं 10.7.3 पर हूं और मैंने httpd.conf (जो काम करता है) में PHP को सक्षम करने के अलावा किसी भी कॉन्फ़िगरेशन फ़ाइलों को नहीं छुआ है।

मुझे पता है कि यहां इस बारे में कम से कम 2 प्रश्न हैं, लेकिन वहां विस्तृत समाधान काम नहीं करते हैं। और न ही अन्य समाधान जो मुझे वेब पर मिले हैं। मैं कुछ बेवकूफी कर रहा हूं या कुछ अनदेखी कर रहा हूं, वरना मैं शायद पागल हो रहा हूं, लेकिन यह काम नहीं कर रहा है।

मैंने सभी सामान्य सामान आज़माए हैं:

  1. में /private/etc/apache2/users/<myusername>.conf, वेब सर्वर AllowOverride Noneको बदलने AllowOverride Allऔर पुनः आरंभ करने के लिए

  2. इसके अतिरिक्त, में से /private/etc/apache2/httpd.confकिसी भी / सभी घटना को बदल AllowOverride Noneदें AllowOverride All- मैंने इसे उन सभी विभिन्न स्थानों पर आज़माया है जहाँ ये निर्देश पाए गए हैं

  3. मूल रूप से Optionsपंक्ति के ऊपर / नीचे की रेखाओं के लिए मूल्यों के सभी संभावित संयोजनों को AllowOverrideशामिल करें, जिसमें मान भी शामिल हैं:Indexes MultiViews FollowSymLinks All

इस तरह के बदलाव के बाद, वेब सर्वर को हमेशा पुनरारंभ करना। इसमें से कोई भी काम नहीं करता है। मेरे सभी स्वच्छ आग्रह बस काम नहीं करते हैं; मुझे ४०४ मिलता है - नहीं मिला। अपाचे की त्रुटि लॉग बस मुझे देता है "फ़ाइल मौजूद नहीं है:" त्रुटियां। तो ऐसा लगता है कि mod_rewrite मॉड्यूल बिल्कुल भी काम नहीं कर रहा है।

मैंने सुनिश्चित किया कि mod_rewrite को httpd.conf में लोड किया गया है, जो यह है; यह एक शेर स्थापित पर डिफ़ॉल्ट रूप से है।

पागल बात यह है कि सब कुछ पूरी तरह से काम कर रहा था - जब तक कि मैं शेर को चलाने वाली एक नई मशीन पर नहीं चला गया। यही है, मैं अपनी .htaccess फ़ाइलों में एक त्रुटि का कारण बना रहा हूं क्योंकि मुझे पता है कि यह पहले काम कर चुका है। इसके अलावा, अगर यह एक त्रुटि .htaccess में था, तो मुझे Apache की error_log में mod_rewrite मॉड्यूल से किसी प्रकार का त्रुटि संदेश प्राप्त होगा, कम से कम मुझे बता रहा है कि मॉड्यूल को ही कहा जा रहा है। लेकिन ऐसा नहीं हो रहा है।

क्या मैं कुछ देख रहा हूँ? क्या मुझे कहीं और कॉन्फिगर सेटिंग्स बदलनी है? क्या मुझे PHP का कॉन्फिगर बदलना है? निर्देश क्यों हैं (जैसे MacOSX शेर पर mod_rewrite को कैसे सक्रिय करें और mod_rewrite को Mac OS X पर काम करने के लिए) अन्य लोगों के लिए काम कर रहे हैं लेकिन मेरे लिए नहीं? :)

मैंने पहले ही इस पर घंटों बर्बाद कर दिया है। किसी भी मदद को बहुत सराहा जाएगा।


BTW, मैं MAMP का उपयोग नहीं करना चाहता। मैंने पहले MAMP का उपयोग किया था और यह MySQL के साथ अच्छी तरह से नहीं खेला था जो पहले से ही मेरे सिस्टम पर है। यह एक सिरदर्द को दूसरे सिरदर्द के साथ बदल रहा होगा, इसलिए कोई धन्यवाद :)
नील्स हीडेनरिच

BTW मैं मानक ओएस एक्स लॉयन पर हूं, लायन सर्वर नहीं।
Niels Heidenreich

यह सवाल का जवाब नहीं देता है, लेकिन वेब देव को करने के लिए अपने मैक के स्थानीय वातावरण के साथ कुश्ती का एक विकल्प वैग्रंट की तरह कुछ का उपयोग करना है , जो आपको वर्चुअल-मशीन कॉन्फ़िगरेशन आसानी से सेट और प्रबंधित करने देता है।
दान जे

जवाबों:


12

आपको यह सुनिश्चित करना चाहिए कि आपके /etc/apache2/users/username.conf में आपके पास निम्नलिखित हैं:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

FollowSymlinks और AllowOverride यहां आवश्यक हैं। जब आप अपने प्रश्न में दोनों को इंगित कर रहे हैं, तो शायद आपने इन्हें सही ढंग से मिलकर नहीं बनाया है।

Httpd.conf /pStreet/etc/apache2/extra/httpd-userdir.conf में शामिल करना सुनिश्चित करें। यह डिफ़ॉल्ट रूप से है।

किसी भी संशोधन के बाद, परिवर्तनों को प्रभावी करने के लिए वेब सर्वर को पुनरारंभ करें।

यदि आपको अभी भी समस्या हो रही है, तो शायद आपके वास्तविक पुनर्लेखन नियमों में कोई समस्या है। क्या आप पहले भी .htaccess संदर्भ में उनका उपयोग कर रहे थे? ध्यान दें कि एक .htaccess में, पुनर्लेखन नियम regex को एक अनुरोध URI के खिलाफ अग्रणी स्लैश के बिना और हमेशा उस निर्देशिका के सापेक्ष मिलान किया जाता है जहाँ .htaccess रहता है , जबकि एक वैश्विक httpd.conf में URI को एक प्रमुख स्लैश के साथ मेल खाना चाहिए और है। वेब रूट के सापेक्ष। क्योंकि माना जाता है कि आपके पास .htaccess में ~ / साइट के उपनिर्देशिका में, आपके पुन: लिखने के नियम उस समय से व्यवहार कर सकते हैं जब .htaccess एक (वर्चुअल) होस्ट के वेब रूट में रहता है।

Mod_rewrite डीबग करने के लिए आप लॉगिंग को फिर से लिखना सक्षम कर सकते हैं। आपको यह सक्षम करना चाहिए कि /etc/apache2/httpd.conf में:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

धन्यवाद गेरी। हां, मैंने कोशिश की कि; बस फिर से कोशिश की; दुर्भाग्य से काम नहीं करता है। मैंने .htaccess को नहीं बदला है, यह ~ / साइट्स / में है, जैसा कि पहले था। यह बहुत निराशाजनक है :(
नील्स हीडेनरिच

जैसा कि मैंने ऊपर संशोधन किया था, वैसा ही पुन: लिखने को सक्षम करने का प्रयास करें।
जर्री

ठीक है, यह mod_rewrite के साथ कोई समस्या नहीं है, जैसा कि ऐसा लगता है; यह .htaccess फ़ाइल है जिसे पूरी तरह से अनदेखा किया गया है। मैं इसमें कोई भी कबाड़ रख सकता हूं और मुझे कोई त्रुटि संदेश नहीं मिलता है। इसलिए अपाचे इसे लोड नहीं कर रहा है। मैंने अनुमतियों की जाँच की, वे ठीक हैं (फ़ाइल विश्व-पठनीय है)। मैंने इसे अमल में लाने की कोशिश की, कोई बदलाव नहीं।
नील्स हैडेनरिच

यदि मैं एक .htaccess को / Library / WebServer / Documents में रखता हूँ और इसे जांचने के लिए " लोकलहोस्ट " खोलता हूँ , तो यह अपेक्षित है। यह सिर्फ "~ / साइट" में काम नहीं करता है।
नील्स हैडेनरिच

मैंने कुछ पागल किया और लॉगिन नाम "परीक्षक" के साथ एक दूसरा उपयोगकर्ता खाता बनाया। मैं उस उपयोगकर्ता में सभी के लिए AllowOverride सेट करता हूं .conf। मैंने एक .htaccess युक्त कबाड़ को उस उपयोगकर्ता की साइट फ़ोल्डर में रखा। अगर मैं लोकलहोस्ट / ~ टेस्टीस्टर में जाता हूं, तो मुझे उम्मीद के मुताबिक 500 एरर मिलेंगे।
नील्स हेडेनरिच

1

विकल्प जोड़ना + FollowSymLinks ने मेरे लिए ठीक काम किया

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

यह क्या कर रहा है Options +FollowSymLinks? मैं सिर्फ उस पंक्ति को जोड़ता हूं जो मेरे लिए काम करती है
कणिका

1

मैं एक ऐसी ही समस्या का सामना कर रहा था जहाँ मेरी .htaccess फ़ाइल को पूरी तरह से नजरअंदाज किया जा रहा था जबकि एक वर्चुअलहॉस्ट के तहत मेरे ~ / साइट निर्देशिका के अंदर एक सबफ़ोल्डर में सही ढंग से सेटअप किया गया था।

अंतिम घंटे को विभिन्न कॉन्फ़िगरेशन फ़ाइलों के साथ खेलने और विभिन्न स्थानों में AllowOverride सभी को सेट करने के बाद, मुझे अंत में पता चला कि .htaccess फ़ाइल, जबकि यह खोजक में एक .htaccess फ़ाइल की तरह लग रही थी, वास्तव में एक .htaccess.txt फ़ाइल थी। विस्तार छिपा हुआ।

अपनी .htaccess फ़ाइल को जाँचने और बदलने के लिए, उस पर राइट क्लिक करें और Get Info चुनें और फिर अंत में किसी भी प्रमुख एक्सटेंशन को निकालना सुनिश्चित करें, जैसे कि मेरे पास:

और अब यह काम करता है!


1

नीचे .htaccess प्रविष्टियाँ मेरे लिए ठीक करें

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

.Htaccess को / लाइब्रेरी / वेबसर्वर / दस्तावेज़ों में रखना और "लोकलहोस्ट /" खोलना; यह परीक्षण करने के लिए, उम्मीद के मुताबिक काम करता है। यह सिर्फ "~ / साइट" में काम नहीं करता है। इसके लिए धन्यवाद Niels Heidenreich!


-1

जब आप टाइप करें: / उपयोगकर्ता / उपयोगकर्ता नाम / app_name

वेबसर्वर की जड़ को संदर्भित करता है:

"स्थानीय होस्ट /"

यदि आप अपने पुन: लिखने में / ~ उपयोगकर्ता नाम / app_name का उपयोग करते हैं तो यह काम करना चाहिए।


1
के साथ शुरू पथ /हमेशा अपाचे के लिए पूर्ण पथ हैं, http.conf में वेबसर्वर जड़ की परिभाषा को देखने के ( <Directory "/Library/WebServer/Documents">)
nohillside
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.