باستخدام mod_rewrite وعن النطاقات الفرعية
-
06-07-2019 - |
سؤال
وأنا wan't الناس لتكون قادرة على تسجيل مقاطع خاصة بهم داخل موقعي، ولديهم تلك الأجزاء تكون فرعي الخاصة بهم من موقعي. لذلك يمكن للشخص أن يسجل 'اختبار' ولها 'test.example.com "الرجوع إلى مواقعهم التي من شأنها أن تكون على القول /site.php؟id=1 فكيف سوف أذهب حول كتابة قاعدة mod_rewrite ولهذا؟
المحلول
وmod_rewrite
قد لا تكون أفضل وسيلة لذلك. RewriteRules هي كبيرة لرسم خرائط ملف إلى شيء آخر، لكنه لم يكن يقصد حقا لمطابقة المجال.
وأفضل يمكنك القيام به باستخدام mod_rewrite
هو ما يلي:
RewriteEngine On
# Skip www.domain.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^/(.*)$ site.php?domain=%1&file=$1 [L]
وهي ليست مفيدة حقا. ما أنصح به بدلا من ذلك إذا تحقق قيمة HTTP_HOST
على هذا النحو برمجيا:
function get_subdomain() {
if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches))
return $matches[1];
}
نصائح أخرى
ويمكنك تكوين اباتشي للمطالبة المجالات "الخاصة" في تكوين اباتشي (مثل www.mydomain.com، الخ)، في حاويات المضيف الظاهري ويكون الافتراضي الآخرين لأول المضيف الظاهري. ثم يمكنك إعادة كتابة عنوان الموقع قاعدة لتطبيق إيفاد أن يتفقد URL ويرسل المستخدم الخروج إلى منطقتهم الصحيحة.
ومن طراز أباتشي 2.0 مستندات:
<اقتباس فقرة>وتقريبا أي توجيه أباتشي قد تذهب في وعاء VirtualHost. ال ويستخدم القسم VirtualHost الأول ل طلبات بدون اسم الخادم المعروفة.
اقتباس فقرة>ووضع التعليمات البرمجية للتعامل مع * .mydomain.com في المضيف الظاهري الأول:
<VirtualHost *:80>
Servername custom.mydomain.com
DocumentRoot /var/www/html/custom
RewriteEngine on
RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
# more configs here
</VirtualHost>
<VirtualHost *:80>
Servername www.mydomain.com
DocumentRoot /var/www/html/homepage
# more configs here
</VirtualHost>
في dispatch.cgi، تفقد رابط الدعوة لتحديد أين يجب أن تذهب للمستخدم. تأكد قمت بإعداد DNS لقبول كافة المجالات الفرعية.
وعلى أمل أن يساعد!
في الواقع، لقد تم استخدام هذه التقنية دون مشكلة كبيرة على مدى العام الماضي. لدينا التكوين mod_rewrite ويبدو مثل:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.mydomain.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
RewriteCond %{REQUEST_URI} !admin
RewriteRule (.*) /admin/ [R=301,L]
RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]
وماذا يحدث، هو أن يتم توجيه المستخدمين إلى theiraccount.mydomain.com/admin.
ونحن بعد ذلك استخدام PHP للتعرف على جزء من حساب اسم المجال. استخدام شيء من هذا القبيل $ _SERVER [ 'SERVER_NAME'] أو بعض الطرق للحصول على اسم النطاق وتحليل أنها تعمل بشكل جيد جدا.
وإبقاء هذه التكوينات إلى httpd.conf الرغم من ذلك، هذا سوف تصبح مشكلة وحدة المعالجة المركزية في مواقع الازدحام أعلى ما اذا كان الاحتفاظ بها هتكس.