2009-12-21 26 views
5

Tôi đang cố gắng viết khoảng 5 trang web tất cả trên một máy chủ Apache, tất cả chỉ trên một địa chỉ IP.Apache 2 Cấu hình Trang web có sẵn

Ví dụ:

  • /var/www/site1
  • /var/www/site2
  • /var/www/site3
  • /var/www/site4
  • /var/www/site5

Tuy nhiên, nếu tôi tạo liên kết trên trang web 2 chỉ sử dụng, ví dụ: /index.php, bạn sẽ mong đợi nó tìm trong /var/www/site2/index.php ... nhưng nó thực sự giải quyết thành /var/www/index.php.

Có cách nào thiết lập Apache để biết rằng các thư mục trang web riêng biệt cần phải xử lý và giải quyết vào các thư mục riêng biệt không?

Đây là tệp hiện có trên trang web của tôi vào lúc này. Một thiết lập mặc định một cách công bằng tôi tin rằng:

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    DocumentRoot /var/www 
    <Directory /> 
      Options FollowSymLinks 
      AllowOverride None 
    </Directory> 
    <Directory /var/www/> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride all 
      Order allow,deny 
      allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
      AllowOverride None 
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
      Order allow,deny 
      Allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog /var/log/apache2/access.log combined 

Alias /doc/ "/usr/share/doc/" 
<Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
</Directory> 

Bất kỳ trợ giúp sẽ được apreciated.

Cảm ơn bạn.

Andrew Barlow

+1

Bạn có quản lý để đạt được những gì bạn muốn với đề nghị của tôi hoặc bạn vẫn còn thiếu một cái gì đó? – Zeograd

+0

Không, công việc đó hoàn hảo. Cảm ơn bạn!!! – Schodemeiss

Trả lời

11

Bạn cần chỉ thị ServerName bên trong <VirtualHost>. Nó sẽ cho máy chủ biết máy chủ ảo nào đang được sử dụng tùy thuộc vào yêu cầu của trình duyệt (nếu khách hàng của bạn truy cập http://site1.example.com hoặc http://site2.example.com, họ sẽ kết nối với cùng một IP, do đó máy chủ, nhưng yêu cầu chứa url yêu cầu ban đầu). Bạn sẽ phải sao chép khối <VirtualHost> để có một trang cho mỗi trang web được lưu trữ. Mỗi khối sẽ khác nhau bởi ServerName và DocumentRoot chủ yếu. Bạn có thể sử dụng "apache2ctl-S" để xem cách apache hiểu cài đặt máy chủ ảo của bạn.

Bạn có thể sử dụng một tập tin duy nhất với loại nội dung này:

<VirtualHost *:80> 
    ServerName site1.myserver.com 
    DocumentRoot /var/www/site1 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site2.myserver.com 
    DocumentRoot /var/www/site2 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site3.myserver.com 
    DocumentRoot /var/www/site3 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site4.myserver.com 
    DocumentRoot /var/www/site4 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site5.myserver.com 
    DocumentRoot /var/www/site5 
    ... 
</VirtualHost> 

Tất nhiên, có thể chắc chắn rằng dns cho tất cả những tên kết thúc lên trên IP của bạn. Nó không cần phải là tên miền phụ miễn là chúng hạ cánh trên ip máy chủ của bạn và bạn có một ServerName tương ứng cho nó. Nếu bạn cần thêm tên cho một trang web duy nhất, bạn có thể thêm chúng với "ServerAlias ​​secondname.myserver.com thirdname.myserver.com" bên dưới Tên máy chủ

+0

Tôi nghĩ rằng tôi hiểu, nhưng bạn có thể viết cho tôi một ví dụ nhanh để đưa vào tập tin của tôi xin vui lòng? – Schodemeiss

+0

Tôi đã cập nhật câu trả lời để bao gồm nó – Zeograd

+0

Thankyou cho việc này. Một cuộc sống tuyệt đối tiết kiệm! – Schodemeiss

3

@ Câu trả lời của Zeograd có lẽ là câu trả lời đúng cho hầu hết các giải pháp, tuy nhiên tôi đã có vấn đề tương tự và tất cả những gì tôi cần làm là bật mô-đun ghi đè với lệnh a2enmod.

Đây là những gì tôi chạy qua dòng lệnh trong Ubuntu :

sudo a2enmod rewrite 
sudo service apache2 restart 

Nếu sudo service apache2 restart không làm việc, bạn có thể thử:

sudo /etc/init.d/apache2 restart 
Các vấn đề liên quan