سؤال

وأنا 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 الرغم من ذلك، هذا سوف تصبح مشكلة وحدة المعالجة المركزية في مواقع الازدحام أعلى ما اذا كان الاحتفاظ بها هتكس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top