كيف أجعل Apache يعرف دليل التطبيق الذي سيتم استخدامه في المجالات المختلفة؟

StackOverflow https://stackoverflow.com/questions/1025587

سؤال

أحاول إنشاء موقع باستخدام CodeIgniter.سيكون لدي نطاقات متعددة يتم تقديمها من هذا الخادم، وما أحاول القيام به هو فصل طلبات HTTP لـ www.example1.com عن تلك الخاصة بـ www.example2.com ثم إعادة توجيهها إلى مجلدات التطبيق الصحيحة.

لنفترض أن هذا هو هيكل الدليل الخاص بي:

  • نظام
    • طلب
      • مثال 1
      • example2

لذلك هذا الطلب

www.example1.com/gallery/

سيتم بعد ذلك إعادة توجيهك إلى المجلد exmaple1.

هل لدى أي شخص أي مثال رمز للقيام بذلك؟من الواضح أنك ستحتاج إلى استخدام وحدة ReWrite ...

لقد بحثت حول وثائق Apache ولكن لم أتمكن من الوصول إلى أي مكان.اسمحوا لي أن أعرف إذا كنت بحاجة إلى مزيد من المعلومات حول هذا الموضوع.

هل كانت مفيدة؟

المحلول

يعد استخدام VirtualHost (والاسم المستعار، وإعادة الكتابة) هي الإجابات الأساسية، ولكن إذا كنت تعتقد أنك ستضيف/تزيل مضيفين آخرين باستخدام نفس الإعداد، فسوف أفكر في mod_macro وحدة.هذه وحدة طرف ثالث ستساعدك على تبسيط تكوين Apache وتجنب أخطاء النسخ/اللصق.

مثال بسيط مع التخطيط الخاص بك، حدد ما يلي:

<Macro vh80 name>
 <VirtualHost *:80>
   DocumentRoot /system/application/$name
   ServerName www.$name.com
   CustomLog /system/application/$name/logs/access.log virtcommon
   ErrorLog /system/application/$name/logs/error.log
 </VirtualHost>
</Macro>

وبعد ذلك عند تمكين موقع ما، استخدم التوجيه التالي:

استخدم مثال vh801

والذي سيقوم بإعداد www.example1.com لاستخدام الدليل الذي تم تكوينه كجذر بالإضافة إلى دليل التسجيل الذي تم تكوينه.

نصائح أخرى

ما تحتاجه يسمى استضافة افتراضية لجعل www.example1.com وwww.exaplme2.com يشيران إلى مجلد مختلف في نظام الملفات الخاص بك.

إذا كنت ترغب بالإضافة إلى ذلك في الحصول على مسار مختلف في URI لخدمة المحتوى الرئيسي، فلديك بدائل مختلفة:

  1. أنشئ المجلد فعليًا ولا تقم بإجراء أي تغييرات أخرى

  2. أنشئ رابطًا فعليًا (معرض مسمى يشير إلى المجلد الجذر للمضيف الظاهري الرئيسي) إلى المجلد واستخدم ملف اتبعSymLinks خيار VirtualHost

  3. استخدم الاسم المستعار التوجيه في VirtualHost

    Alias /gallery /
    
  4. استخدم mod_rewrite

    RewriteRule /gallery/(.*) /$1 [QSA]
    

سيكون الخيار الأبسط (إذا سمح CodeIgniter) هو الخيار 1 أو 2.

مقتطف من وثائق VirtualHost:

Running several name-based web sites on a single IP address.

Your server has a single IP address, and multiple aliases (CNAMES) 
point to this machine in DNS. You want to run a web server for 
www.example.com and www.example.org on this machine.

Note

Creating virtual host configurations on your Apache server does 
not magically cause DNS entries to be created for those host 
names. You must have the names in DNS, resolving to your IP 
address, or nobody else will be able to see your web site. 
You can put entries in your hosts file for local testing, 
but that will work only from the machine with those hosts 
entries.

Server configuration

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example.org

# Other directives here

</VirtualHost>

The asterisks match all addresses, so the main server serves no requests. 
Due to the fact that www.example.com is first in the configuration file, 
it has the highest priority and can be seen as the default or primary 
server. That means that if a request is received that does not match 
one of the specified ServerName directives, it will be served by this
first VirtualHost.

هذا في الواقع سؤالان:

  1. كيفية جعل www.example1.com وwww.example2.com مختلفين؟الجواب على هذا هو استضافة افتراضية التوجيه.

  2. كيفية جعل/المعرض يشير إلى المثال 1؟يتم ذلك باستخدام توجيه الاسم المستعار.

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