আমি কীভাবে পিএসএফ-তে নির্দিষ্ট htaccess এবং mod_rewrite পৃষ্ঠা ব্যবহার করে SSL / https এ জোর করতে পারি to
আমি কীভাবে পিএসএফ-তে নির্দিষ্ট htaccess এবং mod_rewrite পৃষ্ঠা ব্যবহার করে SSL / https এ জোর করতে পারি to
উত্তর:
অ্যাপাচি-র জন্য, আপনি mod_ssl
এসএসএলকে এর সাথে জোর করে ব্যবহার করতে পারেন SSLRequireSSL Directive
:
এই নির্দেশিকাটি এসএসএল-এর (যেমন HTTPS) বর্তমান সংযোগের জন্য সক্ষম না করা অবধি অ্যাক্সেস নিষিদ্ধ করে। এটি এসএসএল-সক্ষম সক্ষম ভার্চুয়াল হোস্ট বা ডিরেক্টরিতে সুরক্ষিত হওয়া উচিত এমন স্টাফগুলি প্রকাশ করে যে কনফিগারেশন ত্রুটিগুলির বিরুদ্ধে রক্ষা করার জন্য এটি খুব সহজ। যখন এই নির্দেশিকা উপস্থিত থাকে তখন সমস্ত অনুরোধগুলি অস্বীকার করা হয় যা এসএসএল ব্যবহার করছে না।
এটি যদিও https এ পুনর্নির্দেশ করবে না। পুনঃনির্দেশ করতে, mod_rewrite
আপনার .htaccess ফাইলটিতে নিম্নলিখিত ব্যবহার করে দেখুন
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
বা দেওয়া বিভিন্ন পদ্ধতির যে কোনও
আপনার সরবরাহকারী .htaccess অক্ষম করে রাখার ক্ষেত্রেও আপনি পিএইচপি-র মধ্যে থেকে এটি সমাধান করতে পারেন (আপনি এটি জিজ্ঞাসা করার পরে এটি অসম্ভব, তবে যাইহোক)
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
%{HTTP:X-Forwarded-Proto}
বা %{HTTP:X-Real-Port}
ভেরিয়েবলগুলি ব্যবহার করতে চাইতে পারেন ।
RewriteRule <input-pattern> <output-url>
। সুতরাং, স্থানটি সেখানে থাকা দরকার, এবং একক ^
কেবল "সমস্ত ইনপুট ইউআরএল মেলে" বলে।
আমি এমন একটি mod_rewrite
সমাধান খুঁজে পেয়েছি যা প্রক্সিড এবং অপ্রক্সাইড সার্ভার উভয়ের জন্যই ভাল কাজ করে।
আপনি যদি ক্লাউডফ্লেয়ার, এডাব্লুএস ইলাস্টিক লোড ব্যালেন্সিং, হেরোকু, ওপেনশিফ্ট বা অন্য কোনও ক্লাউড / প্যাস সলিউশন ব্যবহার করছেন এবং আপনি সাধারণ এইচটিটিপিএস পুনঃনির্দেশের সাহায্যে পুনঃনির্দেশ লুপগুলি অনুভব করছেন তবে পরিবর্তে নিম্নলিখিত স্নিপেট ব্যবহার করে দেখুন।
RewriteEngine On
# If we receive a forwarded http request from a proxy...
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
# ...or just a plain old http request directly from the client
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
# Redirect to https version
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
গর্ডনের খুব বিস্তৃত উত্তর থেকে সরাসরি orrowণ নেওয়া, আমি নোট করব যে আপনার প্রশ্নে এইচটিটিপিএস / এসএসএল সংযোগগুলি বাধ্য করার ক্ষেত্রে পৃষ্ঠা-নির্দিষ্ট থাকার কথা উল্লেখ করা হয়েছে।
function forceHTTPS(){
$httpsURL = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if( count( $_POST )>0 )
die( 'Page should be accessed with HTTPS, but a POST Submission has been sent here. Adjust the form to point to '.$httpsURL );
if( !isset( $_SERVER['HTTPS'] ) || $_SERVER['HTTPS']!=='on' ){
if( !headers_sent() ){
header( "Status: 301 Moved Permanently" );
header( "Location: $httpsURL" );
exit();
}else{
die( '<script type="javascript">document.location.href="'.$httpsURL.'";</script>' );
}
}
}
তারপরে, এই পৃষ্ঠাগুলির শীর্ষে যতই আপনি পিএইচপি এর মাধ্যমে সংযোগ করতে বাধ্য করতে চান, আপনি require()
এই (এবং অন্য কোনও) কাস্টম ফাংশন সমন্বিত একটি কেন্দ্রীয় ফাইল করতে পারেন এবং তারপরে কেবল forceHTTPS()
ফাংশনটি চালাতে পারেন ।
আমি এই ধরণের সমাধানটি ব্যক্তিগতভাবে প্রয়োগ করি নি (পিএইচপি সমাধানটি আমি সরলতার জন্য উপরের মতোই ব্যবহার করেছি), তবে নিম্নলিখিতগুলি অন্তত একটি ভাল শুরু হতে পারে।
RewriteEngine on
# Check for POST Submission
RewriteCond %{REQUEST_METHOD} !^POST$
# Forcing HTTPS
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{SERVER_PORT} 80
# Pages to Apply
RewriteCond %{REQUEST_URI} ^something_secure [OR]
RewriteCond %{REQUEST_URI} ^something_else_secure
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Forcing HTTP
RewriteCond %{HTTPS} =on [OR]
RewriteCond %{SERVER_PORT} 443
# Pages to Apply
RewriteCond %{REQUEST_URI} ^something_public [OR]
RewriteCond %{REQUEST_URI} ^something_else_public
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_METHOD} !^POST$
?
RewriteCond %{REQUEST_METHOD} !^POST$
এই পুনঃনির্দেশগুলি দ্বারা লাইনটির পোস্টের জমাগুলি আটকানো উচিত।
মোড-পুনর্লিখন ভিত্তিক সমাধান:
এইচটিসেসিতে নিম্নলিখিত কোডটি ব্যবহার করে সমস্ত HTTP অনুরোধগুলি স্বয়ংক্রিয়ভাবে https এ ফরোয়ার্ড করে।
RewriteEngine on
RewriteCond %{HTTPS}::%{HTTP_HOST} ^off::(?:www\.)?(.+)$
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]
এটি আপনার অ-www এবং www HTTP অনুরোধগুলিকে https এর www সংস্করণে পুনর্নির্দেশ করবে ।
আরেকটি সমাধান (অ্যাপাচি ২.৪ *)
RewriteEngine on
RewriteCond %{REQUEST_SCHEME}::%{HTTP_HOST} ^http::(?:www\.)?(.+)$
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]
এটি% ache REQUEST_SCHEME as ভেরিয়েবলটি ২.৪-এর পরে মোড-রাইরাইটে যুক্ত হয়েছিল বলে অ্যাপাচি-র নিম্ন সংস্করণগুলিতে কাজ করে না।
আমি কেবল এটি উল্লেখ করতে চাই যে ডিরেক্টরি গভীরতায় জুড়ে একাধিক .htaccess ফাইল ব্যবহার করার সময় অ্যাপাচি- র সবচেয়ে খারাপ উত্তরাধিকারের নিয়ম রয়েছে। দুটি মূল সমস্যা:
RewriteOptions InheritDownBefore
পরিবর্তন করতে আপনাকে অবশ্যই নির্দেশিকা (বা অনুরূপ) নির্দিষ্ট করতে হবে। (প্রশ্ন দেখুন)এর অর্থ যদি আপনি সাব ডিরেক্টরিতে অন্য কোনও .htaccess ফাইল ব্যবহার করেন তবে অ্যাপাচি উইকিতে প্রস্তাবিত বৈশ্বিক সমাধান কাজ করে না । আমি একটি পরিবর্তিত সংস্করণ লিখেছি যা এতে করে:
RewriteEngine On
# This will enable the Rewrite capabilities
RewriteOptions InheritDownBefore
# This prevents the rule from being overrided by .htaccess files in subdirectories.
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [QSA,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/
সহজ এবং সহজ, কেবল নিম্নলিখিত যুক্ত করুন
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
সাধারণ একটি:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.example\.com)(:80)? [NC]
RewriteRule ^(.*) https://example.com/$1 [R=301,L]
order deny,allow
আপনার ইউআরএলকে উদাহরণ.কমের সাথে প্রতিস্থাপন করুন
শুধুমাত্র অ্যাপাচি .htaccess সহ এসএসএলকে বাধ্য করার জন্য আপনি ব্যবহার করতে পারেন
SSLOptions +StrictRequire
SSLRequireSSL
পুনর্নির্দেশের জন্য উপরের উত্তরটি সঠিক
এই কোডটি ব্যবহার করে দেখুন, এটি URL এর মতো সমস্ত সংস্করণের জন্য কাজ করবে
RewriteCond %{HTTPS} off
RewriteCond %{HTTPS_HOST} !^www.website.com$ [NC]
RewriteRule ^(.*)$ https://www.website.com/$1 [L,R=301]