Làm cách nào để khiến Apache theo dõi các liên kết tượng trưng?


98

Trong thư mục www apache của tôi ( /var/wwwtrên Ubuntu 10.10) tôi có:

mydir -> /home/user/mydir

(mà tôi đã tạo ra ln -s)

Bây giờ, nếu tôi muốn xem danh sách các tệp trong mydirweb, tôi phải đưa ra lệnh apache FollowSymLinks, phải không?

Nhưng tôi để nó ở đâu? Trong một .htaccesstập tin? Ở đâu? Tôi đã thử nhiều cách nhưng tôi không hiểu ...

Đây là /etc/apache2/sites-enabled/000-defaulttập tin của tôi :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks Indexes
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                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 ${APACHE_LOG_DIR}/error.log

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

        CustomLog ${APACHE_LOG_DIR}/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>

    Alias /downloads/ "/root/mydir/"
    <Directory "/root/mydir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

Tôi cũng đã thử với một Bí danh trong tệp cấu hình .. vẫn không hoạt động ..
luca

Câu trả lời:


65

Có hai điều ở đây:

  1. liên kết tượng trưng
  2. danh sách thư mục

liên kết tượng trưng

Giả sử /var/wwwlà DocumentRoot cho máy chủ ảo mặc định của bạn, bạn nên tìm tệp cấu hình máy chủ ảo mặc định (có thể /etc/apache2/sites-enabled/000-default) và đặt nó vào trong khối máy chủ ảo đó, ví dụ:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

Nếu bạn không thay đổi bất cứ điều gì, thì tùy chọn đó đã có sẵn.

danh sách thư mục

Để làm cho Apache liệt kê các tệp trong một thư mục, bạn cũng cần bật Indexestùy chọn, ví dụ: thay đổi

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

trong /etc/apache2/sites-enabled/000-default:

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>

Hoặc, có lẽ một cách an toàn hơn là thay đổi nó thành:

    <Directory />
        Options FollowSymLinks
        AllowOverride Indexes
    </Directory>

và đặt điều này trong /home/user/mydir/.htaccess.

    Option Indexes

tại sao .htaccess không hoạt động

Theo mặc định, việc đặt Options <something>một .htaccesstệp sẽ không hoạt động vì mục khác trong tệp cấu hình của bạn : AllowOverride None.

Đó là lý do tại sao chúng ta phải đặt AllowOverride Indexesở đó.

( Tài liệu AllowOverride )


nhìn vào tập tin cấu hình của tôi ở trên ... nó vẫn chưa hoạt động ...
luca

nó có thể là một vấn đề của quyền? Tôi là người dùng root, dù sao thì tôi cũng không nên sử dụng hệ thống với quyền root, tôi là root và thư mục tôi symlink nằm trong root / root / mydir ..
luca

1
Đúng. Bạn thấy thông báo lỗi gì? Bạn sẽ cần phải làm sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirđể làm cho nó hoạt động, và đó có lẽ không phải là một ý tưởng tốt. Tốt hơn để di chuyển các tập tin ở đâu đó dưới /var/wwwnếu bạn có thể.
Mikel

Bất cứ khi nào bạn gặp lỗi và đang yêu cầu trợ giúp, bạn nên cung cấp thông báo lỗi chính xác cho chúng tôi. Và sẽ có manh mối trong /var/log/apache2/error.log.
Mikel

7
Hãy chắc chắn rằng bạn không trỏ đến thư mục chính của bạn khi bạn đã mã hóa nó, tức là một liên kết tượng trưng trong /var/www/home/user/directory. Nó sẽ tạo ra một cơn đau đầu rất lớn.

11

Tùy chọn phải được sử dụng như thế này:

Options +FollowSymLinks

Thông thường, nó được đặt trong cấu hình Apache ( httpd.confhoặc conf.d/hoặc sites-enabled/) bên trong a <Directory>.

Xem Options, AllowOverride<Directory>trong tài liệu Apache.


1
Trong trường hợp FollowSymLinks cụ thể, nó PHẢI nằm trong cấu trúc Thư mục khi ở trong tệp .conf. Từ hướng dẫn hiện tại của Apache "Các tùy chọn FollowSymLinks và SymLinks IfOwnerMatch chỉ hoạt động trong các phần <Directory> hoặc .htaccess."
ClearCrescendo

1
Cảnh báo: Trộn Tùy chọn với dấu + hoặc - với những tùy chọn không có cú pháp không hợp lệ và có khả năng gây ra kết quả không mong muốn.
Kurdtpage

10

Với cấu hình gốc (mới) trên Ubuntu 14.04 với apache 2.4.7, không cần thay đổi bất cứ điều gì trong * .conf để theo các liên kết tượng trưng được tạo trong / var / www / html.

Nhưng điều cần thiết là dữ liệu www của người dùng có quyền truy cập TẤT CẢ đường dẫn của mục tiêu symlink (ngay cả đối với các máy chủ ảo không chỉ cho các liên kết sim). Ví dụ,

cd /var/www/html
ln -s /path/to/mirror/cran-mirror cran

Trong ví dụ này, dữ liệu www của người dùng (hoặc tất cả người dùng nếu bạn muốn, nhưng có thể nguy hiểm) cần thực thi quyền đối với thư mục. Cần x quyền trong mỗi / đường dẫn, / đường dẫn / đến và / đường dẫn / đến / gương. Cũng cần có quyền Đọc trên thư mục đích và tùy thuộc vào mục tiêu của thư mục, có thể người dùng cũng cần dữ liệu www.

Manh mối được lấy từ https://stackoverflow.com/a/14623574


1

Tôi không thể làm việc này cho đến khi cài đặt mô-đun apache autoindex. Trong số rất nhiều bài viết blog và bài viết diễn đàn, không ai đề cập đến nó là cần thiết. Hy vọng điều này sẽ giúp được ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.