.htaccess রুট URL টি উপ-ডিরেক্টরিতে পুনর্নির্দেশ করতে পুনরায় লিখন


246

পেতে চেষ্টা করছে

www.example.com

সরাসরি যেতে

www.example.com/store

আমি কোডের একাধিক বিট চেষ্টা করেছি এবং কোনওটিই কাজ করে না।

আমি যা চেষ্টা করেছি:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

আমি কি ভুল করছি?

উত্তর:


275

আপনি একটি পুনর্লিখনের নিয়ম ব্যবহার করতে পারেন যা মূলটিকে উপস্থাপন করতে ^ uses ব্যবহার করে এবং এটি আপনার / স্টোর ডিরেক্টরিতে পুনরায় লেখার জন্য:

RewriteEngine On
RewriteRule ^$ /store [L]

6
RewritRule ^ /? $ /Index.do [R]
বার্কলে

2
gu / $ কখনও মেলেনি বলে মনে হয় তাই আমার অনুমান ^ /? $ প্রয়োজন হয় না।
নাটেস

তাহলে কি সম্পূর্ণ ইউআরএল দেখানো এবং প্রক্রিয়াজাতকরণের নিয়ম চালিয়ে যাওয়া সম্ভব? আমার ক্ষেত্রে, আমি কয়েকটি url আবার লিখি যাতে সেগুলি সুন্দর হয়। এটি url উদাহরণ.com রাখে - আমি উদাহরণ.com/store চাই এবং তারপরে অন্যান্য লেখার সাথে চালিয়ে যেতে চাই।
gin93r

আমার জন্য খুব ভাল কাজ করে।
জিতেশ সোজিত্র

1
সম্প্রতি উবুন্টু অ্যাপাচি ২.৪..7 এর কোনও সাইটে এটি কেন কাজ করে না তা ডিবাগ করার জন্য আমি অনেক সময় ব্যয় করেছি। পুনর্লিখনের ডিবাগিংটিতে নিয়মটি আঘাত হানা এবং একটি অভ্যন্তরীণ পুনঃনির্মাণ তৈরি করা দেখায়। তারপরে মনে হয়েছিল যে এটি কেবল পার্ক করে কোনও সূচী পৃষ্ঠার সন্ধান করবে। দেখা যাচ্ছে যে যদি মোড_ডির সক্ষম হয়ে থাকে এবং দিরের মধ্যে যদি একটি সূচক পৃষ্ঠার প্রার্থী থাকে তবে এটি মোড_আরাইটটি ওভাররাইড করে, আপনি নির্ধারণ না করে: ডিরেক্টরি চেকহ্যান্ডার অন
জেরিট

142

আমি অবাক হয়েছি যে কেউই এটি উল্লেখ করেনি:

RedirectMatch ^/$ /store/

মূলত, এটি মূল এবং শুধুমাত্র মূল URL টি পুনঃনির্দেশ করে। উত্তরটি এই লিঙ্কটি থেকে উত্পন্ন


3
ধন্যবাদ, এটি ইতিমধ্যে বিদ্যমান নিয়মের সাথে আমার পক্ষে দুর্দান্ত কাজ করেছে। কোন বিরোধ নেই।
বিজ্ঞানী 12:32

1
এই এক পুরোপুরি কাজ করে। এছাড়াও, এটি http এবং https উভয়ই জুড়ে।
সায়েম শাফায়েত

3
এবং এটি 301 এর জন্য পুনর্নির্দেশ:RedirectMatch 301 ^/$ /store/
অ্যান্ড্রিয়া

হ্যাঁ, পুনরায় লেখার মাধ্যমে এটি সহজ। ধন্যবাদ!
অর্ডেন

2
@ আন্ড্রেয়া এবং এটি 302 টি অস্থায়ী পুনঃনির্দেশের জন্য: পুনঃনির্দেশ ম্যাচ 302 $ / $ / স্টোর /
ফাইজান আনোয়ার আলী রুপানী

108

এটা চেষ্টা কর:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^$ store [L]

আপনি যদি কোনও বাহ্যিক পুনর্নির্দেশ চান (যার ফলে দর্শকদের ব্রাউজারটি পুনঃনির্দেশিত URL প্রদর্শন করে), Rসেখানে পতাকাটিও সেট করুন :

RewriteRule ^$ /store [L,R=301]

4
যে সুন্দরভাবে কাজ করেছে। নমুনা.কম এবং www.sample.com উভয়ই www.sample.com/store এ পুনঃনির্দেশ করুন। এটাই আমি চেয়েছিলাম। আপনাকে গম্বো, এবং যারা উত্তর দিয়েছেন সবাইকে ধন্যবাদ আমি আপনার প্রতিক্রিয়া পড়তে অনেক শিখেছি এবং প্রতিক্রিয়া প্রশংসা।

1
আমি কৌতূহলী, www.example.comপুনর্নির্দেশের পরে এই ইউআরআই হিসাবে প্রদর্শিত হবে ? যদি তা না হয় তবে কীভাবে তা করা যায়?
স্টেফমিখাইল

1
♦ - এবং কেন আপনার সমাধান নীচে স্যান্ডারের নীচে থেকে ভাল হবে? আমি লক্ষ্য করেছি যে আপনার চূড়ান্ত লাইনটি একই, তবে যদি এটি প্রয়োজনীয় হয় তবে কেন RewriteCondপ্রথমটি অন্তর্ভুক্ত করবেন RewriteRule?
স্টেফমিখাইল

যদি এই কোডটি ব্যবহার করা হয়, আপনি কি আপনার ব্রাউজারে টাইপ করতে পারেন exmple.com/../aboveSubDir?

@ গ্যামেরিক্স এটি /aboveSubDirব্রাউজার দ্বারা বা সার্ভার দ্বারা সমাধান করা হবে ।
গম্বো

79

এখানে আমি একটি উপ-ডিরেক্টরিতে পুনর্নির্দেশ করতে ব্যবহৃত হয়েছিল। এটি অদৃশ্যভাবে এটি করেছে এবং এখনও বিদ্যমান অনুরোধগুলির মাধ্যমে মঞ্জুরি দেয় যা কোনও বিদ্যমান ফাইল বা যেকোনো কিছুতে মেলে।

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]

আপনার মান সহ সাইট ডট কম এবং সাবডির পরিবর্তন করুন।


প্রত্যাশার মতো কাজ করে! গ্রেট!
কাছার

হোম পেজটি ছিল 'স্টিলথ' ... তবে একবার আমি একটি লিঙ্কে ক্লিক করলে সাবডিরের নাম ঠিকানা বারে প্রদর্শিত হয় ... সাবদিরের নামটি দেখাতে বাধা দেওয়ার কোনও উপায় আছে কি?
ডিএসডিএসএসডিএসডি

4
শুধুমাত্র রুট করে - উপ ডিরেক্টরিগুলি করে না
php-b-grader

3
আমার জন্য এটি "অভ্যন্তরীণ সার্ভার ত্রুটি" দেয়: /
পিথিকোস

1
আপনাকে অনেক ধন্যবাদ, আপনি জানেন না আমি কত দিন ধরে এটি ঠিক খুঁজছিলাম।
বেস ডিজায়ার

26

রুট থেকে সাবফোল্ডারে একটি অদৃশ্য পুনর্নির্দেশ সেট করতে আপনি /root/.htaccess এ নিম্নলিখিত RewritRule ব্যবহার করতে পারেন:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]

উপরের নিয়মটি ব্রাউজারটিকে অভ্যন্তরীণভাবে পুনঃনির্দেশ করবে:

প্রতি

এবং

প্রতি

ব্রাউজারটি মূল ফোল্ডারে থাকবে।


1
এটি স্বীকৃত উত্তর হওয়া উচিত ... RewritRule বরাবর (অন্য কয়েকটি উত্তর হিসাবে প্রস্তাবিত) একটি অসীম পুনর্নির্দেশের কারণ, যেহেতু / সাবফোল্ডারটি / সাবফোল্ডার / সাবফোল্ডার, ইত্যাদিতে পুনঃনির্দেশিত হয় ... রিভারাইটকন্ড% {REQUEST_URI}! Sub / সাবফোল্ডার নিশ্চিত করে তোলে যে যদি কোনও ইউআরএল ইতিমধ্যে পুনঃনির্দেশিত হয় তবে তা আর শেষ হয়নি
প্যাট্রিক

21

আপনি যদি ইউআরএলটি আবার লিখতে চান এবং মূল URL টি লুকিয়ে রাখতে চান তবে অন্য বিকল্প:

RewriteEngine on
RewriteRule ^(.*)$ /store/$1 [L]

http://www.example.com/product.php?id=4এটির সাথে, যদি আপনি উদাহরণস্বরূপ টাইপ করেন http://www.example.com/store/product.php?id=4তবে এটি স্বচ্ছভাবে ফাইলটি খুলবে তবে ব্যবহারকারীকে সম্পূর্ণ url না দেখিয়ে showing


2
যোগ QSA(কোয়েরি স্ট্রিং পরিশেষে যোগ) এর [L]( [L, QSA]) যদি তুমি চাও ক্যোয়ারী স্ট্রিং পুনর্লিখিত URL- এ-পর্যন্ত গড়ায়।
ডিভাইস 1

@ শাইগুয়ে টিপসটির জন্য ধন্যবাদ জানায়, তবে আমার সার্ভারে এটি কিউএসএ ছাড়াই কাজ করেছে (তবে আমি সম্মত হয়েছি সম্ভবত কিউএসএ যুক্ত করা ভাল)। হতে পারে এটি আমার অ্যাপাচি সার্ভারের কোনও বিশেষ কনফিগারেশনের কারণে?
চমত্কার

1
আমার জন্য এই পদ্ধতি, example.com স্বচ্ছভাবে example.com/store কিন্তু example.com/store/test করার example.com/test পুনঃনির্দেশ থেকে বিষয়বস্তু দেখায়, URL দেখাচ্ছে
জিওফ্রে হালে

14

এটি সহজ সমাধান বলে মনে হয়েছিল:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

অন্যান্য কয়েকটি সমাধান নিয়ে আমি পুনর্নির্দেশ লুপগুলি পাচ্ছিলাম।


2
এই ডিরেক্টরিটি লুকায় না
পিএইচপি-বি-গ্রেডার

8

আমি আপনার প্রশ্ন বুঝতে পারি না ...

আপনি যদি প্রতিটি অনুরোধ সাবফোল্ডারে পুনর্নির্দেশ করতে চান:

RewriteRule ^(.*)$ shop/$1 [L,QSA]

http://www.example.com/* -> wwwroot/store/*

আপনি যদি এমন সাবফোল্ডারে পুনর্নির্দেশ করতে চান যার ডোমেন নাম রয়েছে

RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*

আমি আপনার কোডটি ([^\.]+\.[^\.]+)$সাবফোল্ডার নাম হিসাবে ডোমেন সংরক্ষণ করতে চাই ।
চিতাবাহন

6

আমি দেখতে পেয়েছি যে বিজ্ঞপ্তি পুনঃনির্দেশ এড়ানোর জন্য, পুনঃনির্দেশের সুযোগটি মূল ডিরেক্টরিতে সীমাবদ্ধ করা গুরুত্বপূর্ণ। আমি ব্যবহার করতে হবে:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

6

উপরের সমাধানগুলির বেশিরভাগই সঠিক তবে সেগুলি পুনঃনির্দেশের স্বচ্ছতা হারিয়েছে।

আমার ক্ষেত্রে, www.example.com পরিদর্শন করার সময় আমি সাব-ডাইরেক্টরি / স্টোরটিতে পুনঃনির্দেশিত হতে চেয়েছিলাম তবে www.example.com/store এ URL আপডেট না করে । (আমি চাই সমস্ত পৃষ্ঠা ডিরেক্টরিটি সেই ডিরেক্টরিটি পেতে হয়)। যদি এটি আপনার ক্ষেত্রে হয় তবে নীচের সমাধানটি পুরোপুরি কার্যকর করে।

RewriteEngine on
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/$1 [L]

উত্স: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory


আমার যদি প্রয়োজন হয় তবে আমার কী পরিবর্তন হবে যে www.example.com URL টি আপডেট না করে www.othersite.com/store এ পুনঃনির্দেশিত হয়েছে? আমি চেষ্টা করেছি কিন্তু আপনার কোডটি মানিয়ে নিতে অক্ষম হয়েছি
পদক্ষেপ

আমি শেষ লাইনটি পরিবর্তন করতে চেষ্টা করেন RewriteRule ^(.*)$ http://otherpage.com/subfolder/$1 [L]কিন্তু এটি URL টি আপডেট
ধাপ

আপনার সমস্ত প্রয়োজন শব্দের প্রতিস্থাপন exampleএবং store
মাহমুদ জাল্ট

আমি বেশ ভালভাবে ব্যাখ্যা করিনি। আমি মালিক example.comএবং otherpage.comডোমেন। আমি যখন দেখি example.comআমি চাই যে otherpage.com/subfolderইউআরএল আপডেট না করেই সামগ্রীগুলি প্রদর্শিত হোক
পদক্ষেপ নিন

আচ্ছা উপরে আমার উত্তরটি তা করে না। একটি নতুন প্রশ্ন পোস্ট করার চেষ্টা করুন।
মাহমুদ জাল্ট

5

এই উদ্দেশ্যে কেউ পুনঃনির্দেশও ব্যবহার করতে পারে

Redirect 301 / www.example.com/store

অথবা ম্যাপিংয়ের জন্য উপনাম

Alias / /store

সম্পাদনা করুন: মোড_লিয়াস কেবলমাত্র httpd.conf এ প্রযোজ্য।

Refrences


4

পূর্বে আমি নীচের কোডগুলি ব্যবহার করি যা আমার প্রতিটি ডোমেন / সাবডোমেনের চিঠিপত্রের সাব-ডাইরেক্টরিগুলিতে পুনঃনির্দেশ করতে সঠিকভাবে কাজ করছে যা নীচের মতো করে নিজের / সাব ডোমেন হিসাবে নামকরণ করেছে:

RewriteCond %{HTTP_HOST} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

তবে যখন আমি অন্য সাব বা ডোমেন যুক্ত করতে চাই তখন উপরের কোডটিতে এটি যুক্ত করা দরকার। এটি নীচের মত ওয়াইল্ডকার্ড (*) এর মতো কাজ করতে আরও সহজ করার জন্য আরও সুবিধাজনক হওয়া উচিত :

RewriteCond %{HTTP_HOST} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

সুতরাং যখনই অন্য সাবডোমেন / ডোমেন যুক্ত করা হবে ততক্ষণ সাবডোমেন নামের সাব এর উপসর্গ থাকে (যেমন: sub3.domain1.com, sub1.domain3.com ইত্যাদি) কোডটি বৈধ থাকবে।


3

আমার মনে হয় আপনার পোস্ট করা কোডটি নিয়ে প্রধান সমস্যাগুলি হ'ল:

  • হোস্টে প্রথম লাইনটি কঠোরভাবে নমুনা ডট কমের সাথে শুরু হয়, সুতরাং www.sample.com মেলে না।

  • দ্বিতীয় লাইনে কমপক্ষে একটি চরিত্র চায়, তারপরে www.sample.com যাও মেলে না (আপনি প্রথম ডাব্লুটি কেন এড়িয়ে গেছেন?)

  • অন্তর্ভুক্ত নিয়মের কোনওটিই আপনি আপনার লক্ষ্যে নির্দিষ্ট করা ইউআরএলে পুনঃনির্দেশ করবেন না (প্লাস, নমুনাটি ভুল হিসাবে বানানযুক্ত, তবে এটি অপ্রাসঙ্গিক)।

রেফারেন্সের জন্য, আপনার বর্তমানে কোডটি এখানে রয়েছে:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^sample.com$
RewriteRule (.*) http://www.sample.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

2

একটু গুগলিং, আমাকে এই ফলাফলগুলি দেয়:


RewritEngine অন RewritBase /
RewriteRule ^ সূচি। (। *)? $ Http://domain.com/subfolder/ [r = 301]

এটি সূচী নামক কোনও ফাইল অ্যাক্সেস করার যে কোনও প্রয়াসকে পুনর্নির্দেশ করবে your আপনার সাবফোল্ডারটিতে কিছু রয়েছে, ফাইল উপস্থিত রয়েছে কি না।

অথবা এটি চেষ্টা করুন:

RewritCond% {HTTP_HOST}! ^ Www.sample.com $ [এনসি]
পুনর্লিখন R (। *) $% {HTTP_HOST} / সমলস / $ 1 [আর = 301, এল]

আমি .htaccess ফাইলে খুব বেশি পুনর্নির্দেশ করিনি, সুতরাং আমি নিশ্চিত না যে এটি কাজ করবে কিনা।


2

এটি অর্জনের সম্ভাব্য সমাধানগুলির দুটি উপায় .htaccessহ'ল : ১ রুট ফোল্ডারে একটি ফাইল তৈরি করুন (কেবল উদাহরণ ডটকম এবং মাই_ডির আপনার সংশ্লিষ্ট মানগুলির সাথে প্রতিস্থাপন করুন):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_dir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_dir/index.php [L] 
</IfModule>
  1. মূল ইউআরএল "/" কে অন্য ফোল্ডারে বা ইউআরএলে পুনঃনির্দেশের জন্য পুনঃনির্দেশ ম্যাচ ব্যবহার করুন,

    পুনঃনির্দেশ ম্যাচ ^ / $ http://www.example.com/my_dir


1

htaccess এ লাইনের নীচে ব্যবহার করার চেষ্টা করুন

দ্রষ্টব্য: আপনার ডিফল্ট এইচটিএমএল এর নাম কী তা পরীক্ষা করতে হবে

default.html এমন ফাইল যা মূল ফোল্ডারে ডিফল্টরূপে লোড হয়।

RewriteEngine

Redirect /default.html http://example.com/store/


0

আপনি এই কোডটি আপনার .htaccess ফাইলে যুক্ত করুন

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

0

আমি আসল প্রশ্নের উত্তর দেব অন্য সম্ভাব্য বাক্য গঠনটি দেখিয়ে নয় (অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি রয়েছে) কিন্তু আমার এমন কিছু বিষয় নির্দেশ করে যা আমার একবার মোকাবেলা করেছে, যা আমাকে বের করতে একটু সময় নিয়েছে:

What am I doing wrong?

এমন সম্ভাবনা রয়েছে যে% {HTTP_HOST properly সঠিকভাবে বা মোটামুটি জনবহুল হচ্ছে না। যদিও, আমি কেবল দেখতে পেয়েছি যে একটি ভাগ করা হোস্টে কেবলমাত্র একটি মেশিনে দেখা যায়, কিছু কাস্টম প্যাচযুক্ত অ্যাপাচি ২.২ রয়েছে, তবে এটি সম্ভবত সম্ভাবনা।


0

ফাইলটি রুটে উপস্থিত না থাকলে এটি সাবডির চেষ্টা করবে। আমি একটি বেসিক .html ওয়েবসাইটটি সরানোর সময় এটির দরকার হয়েছিল যা মূল স্তরে চালিত হবে এবং এটি একটি সাবডিরের দিকে ঠেলে দেয়। সমস্ত ফাইল সমতল হলে কেবলমাত্র কাজ করে (সাবডিরের মধ্যে .htaccess কৌশল নয়)। সিএসএস এবং জেএস ফাইলগুলির মতো লিঙ্কযুক্ত জিনিসগুলির জন্য দরকারী।

# Internal Redirect to subdir if file is found there.
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
RewriteRule ^(.*)$ /subdir/$1 [L]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.