2014-08-27 13 views
6

Tôi có thể sẽ hỏi một câu hỏi thực sự ngu ngốc nhưng tôi không thể tìm cách để làm những gì tôi muốn.Điều trị một thư mục con làm thư mục gốc cho apache

tôi muốn tải lên một dự án để máy chủ của tôi tại http://example.com/MyNewProject

Trong mỗi trang web tôi bao gồm một tập tin mà làm tất cả hàng hoá nhập khẩu cho stylesheets, javascript vv Tôi không muốn cung cấp đầy đủ đường dẫn mọi lúc tôi chỉ muốn có thể làm /MyStylesheet.css

Tài liệu trang web chính của tôi là /var/www/html/example và thư mục dự án mới của tôi được lưu trữ trong phạm vi /var/www/html/example/MyNewProject.

Điều tôi muốn là khi nhập /MyStylesheet.css thay vì truy cập thư mục web chính của máy chủ, nó sẽ chuyển đến/var/www/html/example/MyNewProject để lấy CSS.

Tôi đã thử thêm dòng sau vào tập tin cấu hình apache của tôi:

Alias /NewProjectTemplate "/var/www/html/example/NewProjectTemplate" 
Alias /NewPRojectTemplate/ "/var/www/html/example/NewProjectTemplate" 

<Directory "/var/www/html/example/NewProjectTemplate"> 
     Options Indexes FollowSymLinks Includes 
     AllowOverride All 
     XBitHack On 
     Order allow,deny 
     Allow from all 
</Directory> 

này không may đã không làm việc vì vậy tôi cũng đã thử thêm dòng sau vào VirtualHosts tôi nộp

<VirtualHost *:80> 
DocumentRoot /var/www/html/example/NewProjectTemplate 
ServerName example.com/NewProjectTemplate 
</VirtualHost> 

Tôi đã nhìn xung quanh trên Google nhưng không thể tìm thấy bất cứ điều gì cụ thể, điều duy nhất tôi đã tìm thấy là một cái gì đó để làm với việc sử dụng động cơ Rewrite nhưng điều này có vẻ hơi quá phức tạp và OTT cho nhu cầu của tôi.

Cảm ơn bạn đã trợ giúp bạn có thể cung cấp.

CẬP NHẬT

OK, tôi đã có một chút nữa, mặc dù không phải rất nhiều, tôi chắc chắn rằng nó không phải là phức tạp này.

Thay vì sử dụng các máy ảo, Tôi bây giờ sử dụng một bí danh và dưới đây là những gì tôi đã thêm vào file httpd.conf của tôi

DocumentRoot "/var/www/html" 
Alias /NewTemp/ "/var/www/html/example/NewProjectTemplate/" 
Alias /NewTemp "/var/www/html/example/NewProjectTemplate" 

<Directory "/var/www/html/example/NewProjectTemplate/"> 
     Options FollowSymLinks Includes 
     AllowOverride all 
</Directory> 

<Directory "/var/www/html/example/NewProjectTemplate"> 
     Options FollowSymLinks Includes 
     AllowOverride all 
</Directory> 

Trong mã HTML của tôi trong SSI của tôi, tôi đang làm việc sau:

<!--#include file="includes/imports.html"--> 

Như bạn có thể thấy đây là một đường dẫn tương đối và Bao gồm là bên trong thư mục gốc của NewProjectTemplate. Tuy nhiên, đây là một tập tin mẫu vì vậy tôi muốn nó luôn luôn đi đến thư mục gốc để tìm tập tin để nó được đảm bảo để làm việc không có vấn đề làm thế nào sâu vào trang web nó. Ví dụ nếu tôi thay đổi dòng vào bên dưới sau đó tôi nhận được một lỗi error processing directive

<!--#include file="/includes/imports.html"-->

Vì vậy, mặc dù nó hoạt động mà không có/nhưng không có dấu gạch chéo, nếu tôi không bao gồm dấu gạch chéo để nhập khẩu này sau đó hoạt động, việc nhập khẩu trong tệp import.html hoạt động mặc dù chúng có chứa dấu gạch chéo hàng đầu để nó luôn luôn đi tới thư mục gốc. Dưới đây là hàng nhập khẩu HTML của tôi nộp

<link rel="stylesheet" type="text/css" href="/StyleSheet.css"> 
<link rel="stylesheet" type="text/css" href="/navigation/top-nav.css"> 
<link rel="stylesheet" type="text/css" href="/navigation/side-nav.css"> 
<script type="text/javascript" src="/scripts/jquery.js"></script> 
<script type="text/javascript" src="/scripts/menu.js"></script> 

Vì vậy, chỉ cần làm rõ, nếu file #include = includes/imports.html thức hoạt động của thị SSI và /StyleSheet.css được nhập thành công mặc dù nó có dấu gạch chéo hàng đầu. Nếu tôi thêm một/vào đường dẫn của SSI thì nó không được nhập khẩu.

Nhưng đây là nơi nó được kì quặc.

Nếu tôi sau đó thêm một tập tin vào một thư mục con ví dụ NewProjectTemplate/MySubDirectory và sau đó thêm SSI thành ../includes/imports.html nó vẫn không hoạt động. Nó giống như chỉ thị #include file SSI của chúng ta mong đợi tập tin nằm trong cùng thư mục làm việc.

Hy vọng điều này có ý nghĩa

+0

Trong mã PHP của chúng tôi, chúng tôi tạo ra một đối tượng môi trường để phân tích các URL hiện tại, và dựa trên các thư mục con tìm thấy trong URL, xác định "baseWebPath" của chúng tôi. Đây là cơ sở cho giải pháp dựa trên mẫu, bất kể vị trí của tập lệnh, chúng tôi luôn có thể bao gồm javascript và css của chúng tôi với cùng một đường dẫn tương đối, chẳng hạn như "javascript/myscript.js". Có lẽ, bạn đang cố gắng tránh các tham chiếu như "../javascript/myscript.js" và "../../javascript/myscript.js". Đề nghị của tôi là đi với một cách tiếp cận dựa trên PHP hơn là cố gắng tìm một giải pháp dựa trên Apache. – Steven

Trả lời

0

Vì vậy, bạn đã thử như thế này trong máy chủ ảo chưa?

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "/var/www/html/example/" 
    ServerName example.local 
    ServerAlias example.local 
    <Directory "/var/www/html/example/"> 
     Options All Includes Indexes FollowSymLinks 
     Order allow,deny 
     Allow from all 
     AllowOverride All 
    </Directory> 

    Alias /NewProjectTemplate /var/www/html/example/NewProjectTemplate 
    <Directory "/var/www/html/example/NewProjectTemplate"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

Hy vọng nó sẽ giúp thời gian này ..

+0

Đây không phải là những gì tôi đã hỏi, điều này đang thay đổi hiệu quả miền của máy chủ web của tôi. URL vẫn nên http://example.com/NewProjectTemplate nhưng NewProjectTemplate được coi là gốc rễ – Boardy

+0

cập nhật câu trả lời, hy vọng nó sẽ giúp ... – pecci

+0

Cảm ơn Tôi đã thử này ngay bây giờ nhưng dường như không làm việc. Tôi vẫn nhận được lỗi PHP nói rằng nó không thể tìm thấy /includes/imports.html./bao gồm bên trong thư mục gốc của NewProjectTemplate. Vì vậy, tôi nghĩ rằng nó phải được tìm kiếm trong máy chủ web gốc – Boardy

Các vấn đề liên quan