htaccess https: // www এ পুনর্নির্দেশ করুন


309

আমি নিম্নলিখিত htaccess কোড আছে:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>

আমি চাই যে আমার সাইটটি https://www.এইচটিটিপিএসের সাথে পুনঃনির্দেশিত করা হবে , এবং www.সাবডোমেন প্রয়োগ করা হবে , কিন্তু যখন আমি অ্যাক্সেস করি http://www.(এইচটিটিপিএস ছাড়াই), এটি আমাকে https://wwwএইচটিটিপিএসের সাথে পুনঃনির্দেশ করে না ।


হওয়া উচিতRewriteCond %{HTTPS} =off
মাইকেল বার্কোভস্কি

1
যদি আমি এটি করি তবে এটি https: / / ww ww w w এ
বিগবেন

প্রিয় @ বিগবেন আপনি এখানে একটি ভুল উত্তর গ্রহণ করেছেন! আমার উত্তরে কেন এটি ভুল তা আপনি জানতে পারেন ।
আমির ফো

উত্তর:


632

এইচটিটিপিএসকে প্রথমে জোর করার জন্য আপনাকে অবশ্যই সঠিক পরিবেশের পরিবর্তনশীলটি পরীক্ষা করতে হবে %{HTTPS} offতবে তারপরে আপনার নিয়মটি প্রেন্ডেন্ড করে www.যেহেতু কার্যকর করার জন্য www.আপনার দ্বিতীয় নিয়ম রয়েছে, প্রথম নিয়মে এটি ব্যবহার করবেন না।

RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

প্রক্সিং সম্পর্কে

প্রক্সিংয়ের কিছু ফর্মগুলির পিছনে যখন ক্লায়েন্ট এইচটিটিপিএসের মাধ্যমে কোনও প্রক্সি, লোড ব্যালেন্সার, যাত্রী অ্যাপ্লিকেশন ইত্যাদির সাথে সংযুক্ত থাকে তখন %{HTTPS}চলকটি কখনই onপুনরায় লেখার লুপের কারণ হতে পারে না । এটি কারণ ক্লায়েন্ট এবং প্রক্সি / লোড ব্যালান্সার এইচটিটিপিএস ব্যবহার করে নিলেও আপনার অ্যাপ্লিকেশনটি প্রকৃতপক্ষে সরল এইচটিটিপি ট্র্যাফিক গ্রহণ করছে। এই ক্ষেত্রে ভেরিয়েবলের X-Forwarded-Protoপরিবর্তে শিরোনামটি পরীক্ষা করে দেখুন %{HTTPS}এই উত্তরটি যথাযথ প্রক্রিয়াটি দেখায়


14
কিছু ক্ষেত্রে আপনার শংসাপত্রটি কেবলমাত্র একটি একক ডোমেনের জন্য ভাল হতে পারে (উদাহরণস্বরূপ এটি www এর সাথে কাজ করতে পারে, তবে বাইরে নাও)। এই জাতীয় ক্ষেত্রে, প্রথমে সঠিক ডোমেনে পুনঃনির্দেশ করুন, তারপরে https এ পুনঃনির্দেশ করুন, অন্যথায় আপনি আপনার ব্রাউজারে একটি শংসাপত্রের ত্রুটি বার্তা পাবেন।
নিক বেনসন

19
যখন আমি RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]একটি ইউআরএল exaple.com/?bla=%20 ব্যবহার করি তখন exaple.com/?bla=%2520 হয়ে যায় , অর্থাৎ শতাংশ চিহ্নটি এনকোড করা হয়েছে। NEডাবল এনকোডিং প্রতিরোধের জন্য পতাকাটি ব্যবহারের কথা বিবেচনা করুন :RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
বীট করুন

5
এটি আমাকে একটি সার্ভারে একটি পুনর্নির্দেশ লুপ দেয়, অন্যটিতে কাজ করে। আমি কেন জানি না
ব্যবহারকারী 151496

4
@ user151496 ব্যর্থ সার্ভারটি কোনও বার্নিশ ক্যাশে দিয়ে যাওয়ার মতো, অথবা যাত্রীর মতো কোনও প্রকার HTTP প্রক্সি ব্যবহার করে? যদি তা হয় তবে আপনাকে ভেরিয়েবলের X-Forwarded-Protoপরিবর্তে এইচটিটিপিএস যাচাই করতে হেডারটি পরীক্ষা করতে হবে %{HTTPS}। কোন অংশটি লুপ, wwwবা বা এইচটিটিপিএস অংশের কারণ হয়ে থাকে তা আপনি বলেননি , তবে এটিই প্রথম জিনিস যা আমার মনে আসে।
মাইকেল বারকোভস্কি 15:38

5
কঠোরভাবে বলতে গেলে, আপনার উপরোক্ত দুটি বিধি ভুল ক্রমে রয়েছে। যদি কোনও অনুরোধ http://example.com(যেমন HTTP এবং নন-www) এর জন্য আসে তবে আপনি ডাবল পুনঃনির্দেশ পাবেন। প্রথমে https://example.com(প্রথম নিয়ম) এবং তারপরে https://www.example.com(দ্বিতীয় বিধি)। উভয় নিয়মই নির্বিশেষে এইচটিটিপিএসে পুনঃনির্দেশ করার কারণে আপনি কেবল এই দুটি নিয়মকে উল্টো করেই এটি ঠিক করতে পারেন।
মিঃ হোয়েট

148

মাইকেলস উত্তরটি আমার পক্ষে কাজ করেছে, যদিও এটি একটি ছোট পরিবর্তন করে:

সমস্যা:

যখন আপনার একক সাইট সুরক্ষা শংসাপত্র রয়েছে , এমন একটি ব্রাউজার যা https: // www ছাড়াই আপনার পৃষ্ঠা অ্যাক্সেস করার চেষ্টা করে। (বা আপনার শংসাপত্রের যে কোনও ডোমেনটি কভার করে) নিরাপদ এবং সঠিক https পৃষ্ঠায় পুনঃনির্দেশ পাওয়ার আগে এটি একটি কুৎসিত লাল সতর্কতা পর্দা প্রদর্শন করবে ।

সমাধান

প্রথমে www- এ পুনঃনির্দেশ (বা যে কোনও ডোমেনটি আপনার শংসাপত্রের আওতায় আসে) ব্যবহার করুন এবং তারপরেই https পুনর্নির্দেশ করুন। এটি নিশ্চিত করবে যে আপনার ব্যবহারকারীরা কোনও ত্রুটির সাথে লড়াই করবেন না কারণ আপনার ব্রাউজারটি এমন শংসাপত্র দেখে যা বর্তমান ইউআরএলটি কভার করে না।

#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

5
+1 কারণ এটি এই দৃশ্যের জন্য সর্বোত্তম বিকল্প, তবে মনে রাখবেন যে ক্লায়েন্ট অ্যাক্সেস করলে একই সমস্যাটি ঘটবে না https://example.combut তবে আমার মতে এটি কোনও ব্যবহারকারী দ্বারা টাইপ করার সম্ভাব্যতম ফর্ম্যাট। (স্বীকৃত
উত্তরেরও

@ লার্জান: ভুল হয়েছে। আপনি 2 প্রকৃত পুনঃনির্দেশগুলি করেন বলেই শংসাপত্রের ব্যতিক্রম ঘটে । "[এল, আর = 301]" "" [আর = 301] "এর সাথে প্রতিস্থাপন করুন। নিয়ম বাতিল করা হয় না। এল =
লাস্ট

আপনি হ্যান্ডেল করার প্রয়োজন হলে https://ছাড়া wwwযখন শুধুমাত্র একটি সার্টিফিকেট থাকার www, সহজভাবে সমাধান এই নিয়মের সাথে যোগ করুন: RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI}[L,R=301] এটা শুধু ফিরে যায় httpযখন সংযোগের চেষ্টা https://example.comশংসাপত্র ত্রুটি এড়ানো।
এরিক বুরেল

1
অনুরোধ করার সময় ডাবল পুনর্নির্দেশ রোধ করার জন্য http://example.com(যেমন HTTP এবং কোনও www)
মিঃ হোয়াইট

@ এরিকবুরেল আপনি এই উদাহরণে শংসাপত্রের ত্রুটিটি এড়াতে পারবেন না - আপনার কোড কার্যকর করার আগে এসএসএল হ্যান্ডশেক ঘটে (যা প্রথম স্থানে এসএসএলের পুরো পয়েন্ট)। যদি আপনার পুনর্নির্দেশ ব্রাউজারগুলির শংসাপত্রের ত্রুটির আগে সম্পাদন করতে সক্ষম হয় তবে এটি বোঝায় যে অনুরোধটি ইতিমধ্যে একটি সুরক্ষিত সংযোগের উপর করা হয়েছিল - যা এসএসএল মডেলটিতে মৌলিক ব্যর্থতা হবে।
মিঃউইট

99

আপনি যদি ক্লাউডফ্লেয়ার বা অনুরূপ সিডিএন ব্যবহার করছেন তবে আপনি এখানে প্রদত্ত% {এইচটিটিপিএস। সমাধানগুলির সাথে একটি অসীম লুপ ত্রুটি পাবেন। আপনি যদি ক্লাউডফ্লেয়ার ব্যবহারকারী হন তবে আপনার এটি ব্যবহার করতে হবে:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

2
দয়া করে নোট করুন ক্লাউডফ্লেয়ার সমর্থন সাইটের বর্তমান পরামর্শটি কিছুটা পৃথক: সমর্থন.
cloudflare.com/hc/en-us/articles/…

1
@ H0maune এর সাথে সম্মত হন, পরামর্শটি ক্লাউডফ্লেয়ার একটি পুনর্নির্দেশ লুপের ফলাফল দেয়, যদিও এই কোডটি এখানে পুরোপুরি কার্যকরভাবে কাজ করে - আপনাকে ধন্যবাদ!
hobiley

2
আমি ec2 তে কৌণিক জাল চালাই। RewritCond% {HTTPS}! = ব্যবহার করে সমাধানগুলি আমাকে অসীম পুনঃনির্দেশ দেয় (কেন সম্পূর্ণ তা নিশ্চিত নয়)। এক্স-ফরওয়ার্ড-প্রোটো সহ এই সমাধানটি কৌশলটি মনে হচ্ছে। ধন্যবাদ!
মার্ক ওয়াটকিন্স

3
আমি পরিবর্তিত =httpকরতে !=httpsআমাদের পরিবেশের জন্য। X-Forwarded-ProtoHTTP হিসাবে শিরোনাম ঘোষণা করা !=httpsহয়নি , তাই কৌশলটি করেছিলেন।
জননাথন এলমোর

এই অন্তর্দৃষ্টি জন্য আপনাকে ধন্যবাদ! আমি কেন {HTTPS}কাজ করছিলাম না তা জানার চেষ্টা করে ঘন্টা ব্যয় করেছি । আমি চেষ্টা {ENV:HTTPS}করেও দেখেছি {SERVER_PORT} 443, কিন্তু শেষ পর্যন্ত কারণ আমার ক্লাউডফ্লেয়ারের কাস্টম এইচটিটিপি অনুরোধ শিরোনামগুলির জন্য পরীক্ষা করা প্রয়োজন।
ক্যামস্লিস

56

খারাপ সমাধান এবং কেন!

নীচের সমাধানটি কখনও ব্যবহার করবেন না কারণ আপনি যখন তাদের কোড ব্যবহার করছেন তখন যা এমন কিছু:

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]

ব্রাউজারটি এতে যায়:

http://example.com

তারপরে পুনঃনির্দেশ:

https://example.com

তারপরে পুনঃনির্দেশ:

https://www.example.com

এটি সার্ভারের কাছে খুব অনুরোধ

এমনকি গৃহীত উত্তরগুলির বেশিরভাগেরই এই সমস্যা রয়েছে।


সেরা সমাধান এবং উত্তর

এই [OR]কোডটিতে url এ দ্বৈত পরিবর্তন রোধ করার শর্ত রয়েছে !

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]

3
"খারাপ সমাধান এবং কেন!" - এই নিয়মগুলি কেবল ভুল ক্রমে। এই দুটি বিধি বিপরীত করুন এবং এটি সঠিক হবে - আপনি কেবল একটি পুনর্নির্দেশ পাবেন এবং দুটি নয়।
মিঃ হোয়াইট

4
হ্যাঁ, প্রদত্ত কোড হিসাবে 2 টি পুনর্নির্দেশের ফলাফল - আমি এটিকে বিতর্ক করছি না - কেবল আমি বলছি যে এই সমস্যাটি সমাধান করার জন্য আপনাকে কেবল এই নিয়মগুলি উল্টানো দরকার, অন্য কোনও পরিবর্তনের প্রয়োজন নেই। ("গৃহীত" উত্তরটি সত্যই ভুল - যা আপনি উল্লেখ করছেন সেটাই মনে হয় - নির্দেশগুলি ভুল ক্রমে থাকে order)
মিঃ হোয়াইট

1
হ্যাঁ @ আমিরফোরস্যাটি ঠিক আছে। এটি দুবার পুনর্নির্দেশ করছে এবং এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
জাকির হুসেইন

4
আপনি যদি ডোমেন নামটি পরিবর্তনশীল রাখতে চান তবে আপনি এটি ব্যবহার করতে পারেন:RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
I.devries

এটি আমাকে আবার পুনঃনির্দেশ করছে wp-content/cache/page_enhanced/। আমি এটা কিভাবে ঠিক করবো? সম্পাদনা: দেখে মনে হচ্ছে এটিকে আমার উপরে রাখতে হবে .htaccess। স্ক্রিপ্টের জন্য ধন্যবাদ :)
গিয়াকোমো

35

প্রক্সি ব্যবহারকারীদের জন্য নয় বরং প্রক্সির জন্য আমি এটি সবচেয়ে ভাল উপায়

RewriteEngine On

### START WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### END WWW & HTTPS

2
সঠিক এই সবচেয়ে ভালো উপায় আমি প্রক্সি ও প্রক্সি ব্যবহারকারীদের জন্য পাওয়া যায় +1 টি
ডীপ 3015

1
এটি সেরাটি, কারণ এটি একাধিক 301 পুনঃনির্দেশগুলি সমাধান করে
নিরাজ চৌহান

1
সর্বকালের সেরা সমাধান।
এস এম জোবায়ের আলম

1
দুর্দান্ত উত্তর। এটিই আমার পক্ষে কাজ করেছে। আপনি যদি ক্লাউডফ্লেয়ারের পিছনে থাকেন তবে কাজ করে (যদিও আমার ক্লাউডফ্লেয়ারে কোনও পৃষ্ঠা বিধি নেই)।
জেসনকো

1
ক্লাউডফ্লেয়ারের সাথে কাজ করা একমাত্র সমাধান
এডিজি

27

সেখানে অনেকগুলি সমাধান রয়েছে। এখানে অ্যাপাচি উইকির একটি লিঙ্ক রয়েছে যা সরাসরি এই সমস্যাটি নিয়ে কাজ করে।

http://wiki.apache.org/httpd/RewriteHTTPToHTTPS

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context

আমি থেকে লেখা শর্ত পরিবর্তন করে পাওয়া RewriteCond %{HTTPS} offথেকে RewriteCond %{HTTPS} !=onযে ফেরৎ সবসময় ঘটতে পারে, এই আমার কাছে ভাল উত্তর বলে মনে হয়।
স্যামুয়েল হকসবি-রবিনসন

এই সমাধানটি সঠিক উত্তর হিসাবে গ্রহণ করা উচিত! আমার জন্যও কাজ করেছেন!
অ্যান্ড্রুশ্মিগ

11

HTTP: // বা https: // থেকে https: // www এ পুনঃনির্দেশ করতে আপনি অ্যাপাচের সমস্ত সংস্করণে নিম্নলিখিত নিয়মটি ব্যবহার করতে পারেন:

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

অ্যাপাচি ২.৪

RewriteEngine on

RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

নোট করুন যে% {REQUEST_SCHEME} ভেরিয়েবলটি অ্যাপাচি ২.৪ থেকে ব্যবহারের জন্য উপলব্ধ ।


1
সমস্যা !: যদি HTTP_HOST এ ইতিমধ্যে www থাকে। তবে স্কিমটি এইচটিটিপিএস নয়, তারপরে আপনি www.www এর সাথে শেষ করবেন। আপনার হোস্টে
জেপসি

@ জেপি আপনি ঠিক বলেছেন আমি পুনর্নির্দেশ গন্তব্য আপডেট করেছি। আপনার ইনপুট জন্য ধন্যবাদ।
স্টারকেন

1
এটি প্রায় আমি সন্ধান করছিলাম তবে আমি অন্যান্য উদাহরণগুলির মতো ডোমেনটিকে জেনেরিক রাখতে চাই। এটা কি সম্ভব?
ক্রোনোকলি

8

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

# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect

এটি আপনাকে পুনঃনির্দেশের লুপ থেকে বাঁচাবে এবং আপনার সাইটটি নিরাপদে এসএসএলে পুনর্নির্দেশ করবে।

পিএস এটি mod_rewrite.c চেক করা ভাল ধারণা!


এটি https: // theurlwithoutwww.com কে https: // www এ পুনঃনির্দেশ করে না।
পেরেন্টেথ্রয়েডগুলি

এটি যদি কেবল আপনার আগে "কিছু www যুক্ত করুন" নির্দেশিকা থাকে তবে এটি কেবলমাত্র সমাধানের সমাধান। অন্যের সমাধানগুলি আমাকে "অনেকগুলি পুনঃনির্দেশে" দেয়।
ড্যানিয়েল.পি।


2
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

নোটস: আপনি নিম্নলিখিত পদক্ষেপগুলি সম্পন্ন করেছেন তা নিশ্চিত করুন

  1. sudo a2enmod পুনর্লিখন
  2. sudo পরিষেবা apache2 পুনরায় আরম্ভ করুন
  3. /Etc/apache2/sites- উপলভ্য / 1000-default.conf এ অবস্থিত আপনার vhost ফাইলটিতে অনুসরণ করুন
<Directory /var/www/html>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  Require all granted
</Directory>

এখন আপনার .htaccess কাজ করবে এবং আপনার সাইটটি http: // এ https: // www এ পুনর্নির্দেশ করবে


1

আমির ফোরসাতীর সমাধান htaccess এর অনুরূপ https: // www এ পুনঃনির্দেশ করুন তবে পরিবর্তনশীল ডোমেন নামের জন্য, আমি পরামর্শ দিই:

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%2%{REQUEST_URI} [R=301,L]


0

আমি এই ওয়েবসাইট থেকে নীচের কোডটি ব্যবহার করেছি, এটি দুর্দান্ত কাজ করে https://www.freecodecamp.org/news/how-to-redirect-http-to-https-using-htaccess/

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

আশা করি এটা সাহায্য করবে


-2

আমি প্রথম উত্তর চেষ্টা করি এবং এটি কাজ করে না ... এই কাজ:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

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

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