অ্যাপাচি ২.২-এর জন্য মোড_উইরাইট কীভাবে সক্ষম করবেন


474

আমি আমার ভিস্তা মেশিনে অ্যাপাচি ২.২-এর নতুন ইনস্টল পেয়েছি, মোড পুনর্লিখন বাদে সবকিছু ঠিকঠাক কাজ করে।

আমি নিঃশর্ত

LoadModule rewrite_module modules/mod_rewrite.s

তবে আমার পুনর্লিখনের কোনও নিয়ম কাজ করে না, এমনকি সাধারণগুলিও পছন্দ করে

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

আমি যে সমস্ত নিয়ম ব্যবহার করছি তা আমার হোস্টিংয়ে কাজ করছে, তাই সেগুলি ঠিক হওয়া উচিত, তাই আমার প্রশ্নটি হ'ল অ্যাপাচি কনফিগারেশনে কোনও লুকানো জিনিস রয়েছে, যা মোড পুনরায় লেখাকে অবরুদ্ধ করতে পারে?


1
আসলে সমস্যাটি ছিল আমার ভুল পথ ছিল, কারণ {OC DOCUMENT_ROOT me আমাকে মূল নির্দেশিকাটির দিকে ইঙ্গিত করেছিল যা হোস্টিংয়ের ক্ষেত্রে ঠিক ছিল, তবে স্থানীয়ভাবে ভুল, সুতরাং সমস্যাটি কেবল রাইরাইটইঞ্জাইন অন ছিল না, যা আমার ইতিমধ্যে ছিল ...
জাকুব আর্নল্ড

আপনি কি দয়া করে এইটির গৃহীত উত্তরটি পরিবর্তন করতে পারেন ? বর্তমান গৃহীত উত্তরের লেখক স্বীকার করেছেন যে এটি যথেষ্ট ভাল নয়।
শ্যাডো উইজার্ড আপনার পক্ষে কান is ই

1
উবুন্টু 12.04 এলটিএসে মোড_উইরাইট কীভাবে সক্ষম করবেন (দেবিয়ানেও কাজ করা উচিত) । এটি ইনস্টলেশন ও সক্রিয়করণ দেখায়, নীচের টিউটোরিয়ালগুলি আশ্চর্যজনকভাবে করে না :(
স্লিক

3
AllowOverride FileInfoএই পৃষ্ঠার সমস্ত উত্তরই বলেছে যে, .htacces ফাইলগুলিতে সমস্ত কিছুর অনুমতি না দিয়ে ব্যবহার করার জন্য .htacces ফাইলগুলিতে মোড_আরাইটের নির্দেশাবলী সক্ষম করতে ইচ্ছুক প্রত্যেককে আমি দৃise়ভাবে পরামর্শ দেব । প্রস্তাবিত 'সমাধান' এর পরিণতি বোঝার চেষ্টা করার পরিবর্তে এই সমস্ত উত্তরগুলি দীর্ঘস্থায়ী হিসাবে এটি কাজ করে-এটি-ঠিক আছে-দৃষ্টিভঙ্গিটি দেখে খুব খারাপ লাগে। আপনি আপনার সার্ভারে কী করছেন এবং কীভাবে আপনি সুনির্দিষ্ট সুযোগসুবিধা দিয়েছিলেন তা সীমাবদ্ধ করার বিষয়টি বোঝার চেষ্টা করুন AllowOverride AllRTFM! , এটি বিষয় পরিষ্কার থেকে ছেড়ে দেওয়া হয়।
রেমিএনএল

1
@ ব্ল্যাক এটি অ্যাপাচি কনফিগারেশন ফাইলটিতে রয়েছে httpd.conf। আমার পিসিতে, এটি ডিরেক্টরি সি: \ xampp \ অ্যাপাচি \ কনফিগারেশনে রয়েছে, কারণ আমি এক্সএএমপিপি দিয়ে অ্যাপাচি ইনস্টল করেছি।
লেক্স সফট

উত্তর:


1005

ব্যবহারের জন্য mod_rewriteআপনি টার্মিনালে নিম্নলিখিত কমান্ডটি টাইপ করতে পারেন:

sudo a2enmod rewrite

পরে অ্যাপাচি 2 পুনরায় চালু করুন

sudo /etc/init.d/apache2 restart

অথবা

sudo service apache2 restart

বা নতুন ইউনিফাইড সিস্টেম কন্ট্রোল ওয়ে অনুসারে

sudo systemctl restart apache2

তারপরে, আপনি চাইলে নীচের .htaccessফাইলটি ব্যবহার করতে পারেন ।

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

উপরের .htaccessফাইলটি (যদি আপনার মধ্যে স্থাপন করা হয় DocumentRoot) ফাইল উপস্থিত না থাকলে সমস্ত ট্র্যাফিক একটি index.phpফাইলের দিকে পুনর্নির্দেশ করবে DocumentRoot

সুতরাং, আসুন আমরা আপনার নীচের ডিরেক্টরি কাঠামো আছে এবং httpdocs হয় DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

যে কোনও ফাইল যা httpdocs এ বিদ্যমান তা .htaccessউপরের দেখানো ব্যবহার করে অনুরোধকারীর কাছে পরিবেশন করা হবে , তবে, সমস্ত কিছু পুনঃনির্দেশিত হবে httpdocs/index.php। এতে থাকা আপনার অ্যাপ্লিকেশন ফাইলগুলি includes/appঅ্যাক্সেসযোগ্য হবে না।


15
এখানে ইউনিক্স সিএলআই-এর ধারণাগুলি সঠিক তবে কমান্ডগুলি কেবলমাত্র দেবিয়ান ভিত্তিক লিনাক্স বিতরণের জন্য কাজ করে, ওপির উইন্ডোজ পরিবেশ নয়।
জেসন রিকার্ড

17
a2enmod পুনরায় লেখার কাজটি করেছেন
ডাঃ ক্যাস্পার ব্ল্যাক

98
আরও দ্রষ্টব্য: আপনার ফাইলটি AllowOverride Allএকেবারে .htaccessপড়ার জন্য আপনার সাইটের কনফিগারেশনটি রয়েছে কিনা তাও আপনাকে নিশ্চিত করতে হবে।
অ্যাডাম রোজনফিল্ড

2
@ ডেনিস আপনি a2dismod পুনর্লিখন ব্যবহার করতে পারেন
জোনাথন মায়াক

3
আমি a2enmod rewriteউইন্ডোতে কীভাবে ব্যবহার করতে পারি ?
নমন

229

আমার পরিস্থিতির জন্য, আমি ছিল

RewriteEngine On

আমার মধ্যে .htaccess, মডিউলটি লোড হচ্ছে এবং এটি কাজ করছে না।

আমার সমস্যার সমাধানটি ছিল আমার ভোস্ট এন্ট্রিটি ইনক্লুডে সম্পাদনা করা

AllowOverride all

মধ্যে <Directory>প্রশ্নে সাইটের জন্য অধ্যায়।


10
বস্তুত, এমনকি a2enmod rewrite& RewriteEngine Onমধ্যে .htaccess- অস্তিত্ব AllowOverride allVirtualHost ফাইলে এটা কাজ থেকে বিরত হবে - এই কি আমার কাছে এটিকে পরিবর্তন করা ধরা হয় AllowOverride allএকটি যাদুমন্ত্র মত কাজ :)
HeavenCore

9
শিক্ষানবিস এখানে .. ভার্চুয়ালহোস্ট ফাইলটি কোথায়?
davneet

3
এই যাওয়ার উপায় ... এই ব্যতীত আমার আরও সমস্ত কিছু সেট ছিল।
আর্যাউন

2
AllowOverrideনির্দেশ নির্ধারণ করে "নির্দেশনা প্রকারভেদ যে অনুমতি দেওয়া হয় .htaccessফাইল"। তদ্ব্যতীত, "যখন এই নির্দেশিকা সেট করা থাকে None, তখন .htaccessফাইলগুলি সম্পূর্ণ উপেক্ষা করা হয় this এই ক্ষেত্রে, সার্ভারটি .htaccessফাইল সিস্টেমে ফাইলগুলি পড়ার চেষ্টাও করবে না ।" সরকারী দস্তাবেজ: httpd.apache.org/docs/2.2/mod/core.html#allowoverride
জন এর্ক

এটি আমার জন্য এটি স্থির করে দিয়েছে - আমার ওয়ার্ডপ্রেসটির সাথে একটি সমস্যা ছিল বেশিরভাগ ডেস্ক: সঠিকভাবে কাজ করছে না mal আপনি যদি করেন a2enmod rewriteএবং তারপরে ভার্চুয়ালহোস্টগুলি ফাইলটিতে 'AllowOverride কিছুই নয়' থেকে 'AllowOverride All' তে পরিবর্তন করা উচিত এটি কাজ করা উচিত। ভার্চুয়ালহোস্ট ফাইল প্রয়োগ করা হয় যদি আপনি একই সার্ভারে (এবং আইপি ঠিকানা) একাধিক ডোমেন নাম চালাচ্ছেন। আপনি ডোমেন সেট আপ করতে এটি সেট আপ করতে হবে।
জেসন প্রেস্টন

83

সেটিং করার চেষ্টা করুন: AllowOverride All


দ্বিতীয় সর্বাধিক সাধারণ ইস্যুতে মোড রাইরাইট সক্রিয় করা নেই: a2enmod rewriteএবং তারপরে অ্যাপাচি পুনরায় চালু করুন।


এটি # 1 উত্তর হওয়া উচিত কারণ এটি কোনও ডিফল্ট উবুন্টু ইনস্টলেশনে যে সমস্যাটি সমাধান করে তা সমাধান করে!
স্লিক

1
এটি .htaccess কে অন্য কোনও অ্যাপাচি কনফিগারেশন ওভাররাইড করার অনুমতি দেবে। এটি সুপারিশ করা হয় না।
ভড়গব নানেকালভা

হ্যাঁ :) এটি আমার সমস্যাও ছিল, তবে আপনি এখানে আমার মতো ছদ্মবেশীদের জন্য ব্যাখ্যা করছেন যে এই "AllowOverride All" /etc/apache2/sites- উপলভ্য / জেলিসিটনাম লেখার কোডে রয়েছে এবং [sitename-ssl] .conf। আপনার কারণে আমাকে একটি দ্বিতীয় গবেষণা করতে হয়েছিল: ডি, ধন্যবাদ!
মেটাট্রন

77

যদি উপরের কাজগুলি না করে তবে / ইত্যাদি / এপাচি 2 / সাইটগুলি সক্ষম / 000-ডিফল্ট সম্পাদনা করার চেষ্টা করুন

প্রায় শীর্ষে আপনি পাবেন

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

পরিবর্তন AllowOverride Noneকরার জন্যAllowOverride All

এটি আমার জন্য কাজ করেছে


এর থেকে ত্রুটি পরিবর্তিত /laravel/public/authors was not found on this serverহয়েছে/index.php was not found on this server
গঙ্গারাজু

ক্যান্ট <ডিরেক্টরি>> কেবল <ভার্চুয়ালহোস্ট *: 80> খুঁজে পাওয়া যায় না
নিকোলাস এস এক্সু

1
@ নিকোলাস এস। এক্স এ <ভার্চুয়ালহোস্ট *: 80> ট্যাগে রাখুন
উইমডেটর

আমি একই কাজ করেছি তবে <Directory /var/www/html>এই ফোল্ডারটি থেকে কেবলমাত্র প্রয়োগ করতে একটি নতুন বিভাগ যুক্ত করেছি ।
লুই লাউডোগ ট্রোটিয়ার

44

উবুন্টুতে:

চালান:

a2enmod rewrite

এবং তারপর:

service apache2 restart

mod_rewrite এখন সক্ষম হবে!


28

এই সমস্যাটির মূলটি আপনি যদি জানেন তবে আপনি কীভাবে এই সমস্যাটি ঠিক করতে পারবেন তার অনেকগুলি উপায় রয়েছে।

সমস্যা ঘ

প্রথমত, আপনার অ্যাপাচিটিতে mod_rewrite.c মডিউল ইনস্টল বা সক্ষম না থাকাতে সমস্যা হতে পারে।

এই কারণে, আপনাকে নিম্নলিখিত হিসাবে এটি সক্ষম করতে হবে

  1. আপনার কনসোলটি খুলুন এবং এতে টাইপ করুন, এটি:

    sudo a2enmod rewrite

  2. আপনার অ্যাপাচি সার্ভার পুনরায় চালু করুন।

    service apache2 restart

সমস্যা 2

  1. উপরের পাশাপাশি, আপনি যদি এটি কাজ না করে থাকেন তবে অ্যাপাচি কনফ ফাইল থেকে ওভাররাইড নিয়মটি পরিবর্তন করতে হবে (হয় অ্যাপাচি 2 কোডনফ, http.conf, বা 000-ডিফল্ট ফাইল)।

  2. "ডিরেক্টরি / var / www /" সন্ধান করুন

  3. "সমস্ত ওভাররাইড" তে "ওভাররাইড কিছুই নয়" পরিবর্তন করুন

সমস্যা 3

আপনি যদি পুনর্লিখনের মডিউলটি উল্লেখ করে একটি ত্রুটি পান তবে সম্ভবত আপনার ইউজারডির মডিউলটি সক্ষম নয়। এই কারণে আপনাকে এটি সক্ষম করতে হবে।

  1. কনসোলে এটি টাইপ করুন:

    sudo a2enmod userdir

  2. তারপরে এখনও সক্ষম না করা থাকলে (উপরে উল্লিখিত) পুনর্লিখনের মডিউলটি সক্ষম করার চেষ্টা করুন।

এ সম্পর্কে আরও পড়তে, আপনি এই সাইটটি দেখতে পারেন: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html


2
ইস্যুটির দুর্দান্ত ভাঙ্গন।
বানাগো

AllowOverride Allএটি ব্যবহার করবেন না কারণ এটি অনেকগুলি বিপজ্জনক বৈশিষ্ট্য সক্ষম করবে (যেমন পার্ল স্ক্রিপ্টগুলি ব্যবহার করে)। পরিবর্তে ব্যবহার করুনAllowOveride Options
Marki555

28

নতুন অ্যাপাচি সংস্করণটি কোনওভাবে পরিবর্তিত হয়েছে। যদি আপনার অ্যাপাচি সংস্করণটি ২.৪ হয় তবে আপনাকে যেতে হবে /etc/apache2/। নামে একটি ফাইল থাকবে apache2.conf। আপনাকে এটি সম্পাদনা করতে হবে (আপনার কাছে রুট অনুমতি থাকা উচিত)। ডিরেক্টরি পাঠ্যটি এর মতো পরিবর্তন করুন

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

এখন অ্যাপাচি পুনরায় চালু করুন।

service apache2 reload

আশা করি এটা কাজ করবে.


এটি আপ টু ডেট উত্তর।
পলক

1
আপনি যদি 2019 এবং এর বাইরেও থাকেন তবে দয়া করে এই উত্তরটি উপস্থাপন করুন :)
লুইজ ক্যাভালকান্তি

27

টার্মিনাল এবং টাইপিন খুলুন a2enmod rewrite, এটি mod_rewriteঅ্যাপাচি-র জন্য আপনার মডিউল সক্ষম করবে ।

তারপরে যান /etc/apache2/sites-availableএবং ডিফল্ট ফাইলটি সম্পাদনা করুন। (এর জন্য আপনার অবশ্যই এই ফাইলটিতে লিখিত অনুমতি এবং সাইটগুলি উপলভ্য ফোল্ডার থাকতে হবে।)

বিদ্যমান লাইনগুলি 4 থেকে 14 এর সাথে নীচে প্রতিস্থাপন করুন

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

এখন /etc/init.d/apache2 restartবা আপনার অ্যাপাচি পুনরায় চালু করুনservice apache2 restart

আবার পরিষ্কার ইউআরএল পরীক্ষা নিন এবং এবার পাস হবে।


15

<সম্পাদন করা>

সবেমাত্র আপনি লক্ষ্য করেছেন যে আপনি mod_rewrite.s এর পরিবর্তে mod_rewrite.s বলেছেন - আশা করি এটি আপনার প্রশ্নের একটি টাইপো, httpd.conf ফাইলে নয়! :)

</ সম্পাদনা>

আমি লিনাক্সে অ্যাপাচি ব্যবহার করতে আরও অভ্যস্ত, তবে অন্য দিন আমাকে এই কাজটি করতে হয়েছিল।

প্রথমে, আপনার অ্যাপাচি ইনস্টল ডিরেক্টরিটি একবার দেখুন। (আমি ধরে নিচ্ছি যে আপনি এটি এখানে "সি: \ প্রোগ্রাম ফাইলগুলি" এ ইনস্টল করেছেন)

ফোল্ডারে একবার দেখুন: "সি: \ প্রোগ্রাম ফাইলগুলি \ অ্যাপাচি সফ্টওয়্যার ফাউন্ডেশন \ অ্যাপাচি ২.২ \ মডিউল" এবং নিশ্চিত করুন যে সেখানে মোড_আরাইট.সো.স নামক একটি ফাইল আছে। (এটি হওয়া উচিত, এটি ডিফল্ট ইনস্টলের অংশ হিসাবে সরবরাহ করা হয়।

এরপরে, "সি: \ প্রোগ্রাম ফাইলগুলি \ অ্যাপাচি সফ্টওয়্যার ফাউন্ডেশন \ অ্যাপাচি ২.২ \ কনফ" খুলুন এবং httpd.conf খুলুন। লাইনটি নিশ্চিত করুন:

#LoadModule rewrite_module modules/mod_rewrite.so

নিঃশর্ত:

LoadModule rewrite_module modules/mod_rewrite.so

এছাড়াও, আপনি যদি ডিফল্ট অনুসারে RewritEngine সক্ষম করতে চান তবে আপনি এর মতো কিছু যুক্ত করতে চাইতে পারেন

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

আপনার httpd.conf ফাইলের শেষে।

যদি তা না হয় তবে নিশ্চিত হয়ে নিন যে আপনি নির্দিষ্ট করেছেন

RewriteEngine On

আপনার .htaccess ফাইলে কোথাও।


@ গাবাহাবে আপনার অবতারটি ঠিক দেখে মনে হচ্ছে যেন এটি আমার দস্তাবেজে একটি আইকন ধারণ করে আছে, হ্যাঁ
জোনাথন ডস সান্টোস

5

আমি সবেমাত্র এটি করেছি

sudo a2enmod rewrite

তারপরে আপনাকে আদেশ অনুসরণ করে অ্যাপাচি পরিষেবাটি পুনরায় চালু করতে হবে

sudo service apache2 restart

4

পুরানো থ্রেড, কেবল এমনটি রাখতে চান যে সমস্তটির জন্য ওভাররাইড সেট না করে পরিবর্তে আপনি যে নির্দিষ্ট মড ব্যবহার করতে চান তা ব্যবহার করুন,

AllowOverride mod_rewrite mod_mime

এবং এই লাইনটি অন-মন্তব্য করা উচিত

LoadModule rewrite_module modules/mod_rewrite.so

Refrences


4

কমান্ড নীচে ব্যবহার করুন

sudo a2enmod rewrite

এবং নীচের কমান্ডের মাধ্যমে অ্যাপাচি পুনরায় চালু করুন

sudo service apache2 restart

3

এটি করার একাধিক উপায় অবশ্যই রয়েছে তবে আমি আরও মান ব্যবহার করার পরামর্শ দিচ্ছি:

ErrorDocument 404 /index.php?page=404

3

প্রথমবার আমি mod_rewrite নিয়ম আমার ট্রাফিক উপেক্ষা সঙ্গে লড়াই, আমি শিখেছি (frustratingly) যে আমি তাদের ভুল রেখেছিলেন <VirtualHost>, যার অর্থ যে আমার ট্রাফিক উপেক্ষা করা হবে সব তাদের কোন ব্যাপার না যতই ভালো করে লেখা তারা। আপনার সাথে এটি ঘটছে না তা নিশ্চিত করুন:

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

আপনি যদি অ্যাপাচি এর কৌতূহলী পুনঃসূচনা সম্পাদন করেন তবে এই প্যারামিটারগুলি সক্রিয় হবে, যাতে আপনি সেগুলি পুনর্ব্যবহার করতে পারেন এবং মোড_আরাইট আচরণটি নিবিড়ভাবে পর্যবেক্ষণ করতে পারেন। আপনার সমস্যাটি স্থির হয়ে গেলে, রিরাইটলগলাইভেলটিকে আবার নীচে ঘুরিয়ে উদযাপন করুন।

আমার 100% অভিজ্ঞতার মধ্যে, আমি খুঁজে পেয়েছি যে রিরাইটলগ আমার পুনর্লিখনের নিয়মগুলির সাথে সমস্যাটি আবিষ্কার করতে সহায়তা করেছে। আমি এটি যথেষ্ট সুপারিশ করতে পারি না। আপনার সমস্যা সমাধানের জন্য শুভকামনা!

এছাড়াও, এই বুকমার্কটির আপনার সবচেয়ে ভালো বন্ধু: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog


2

আমার জন্য কী কাজ করেছে (উবুন্টুতে):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

এছাড়াও, ইতিমধ্যে উল্লিখিত হিসাবে, নিশ্চিত করুন যে AllowOverride allপ্রাসঙ্গিক বিভাগে সেট করা আছে/etc/apache2/sites-available/default

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.