Điểm:1

Làm cách nào để sử dụng Mod Rewrite để truy cập các tệp thư mục gốc không phải tài liệu?

lá cờ tr

Tôi có cấu trúc sau cho mã trang web của mình tại /var/www/html

-- các tập tin
---- test.txt

-- ứng dụng
---- SomePhpCodes.php
---- SomePhpCodes.php

-- công cộng
---- index.php
---- .htaccess

Gốc tài liệu được đặt là "/var/www/html/public" nhưng tôi cũng muốn các tệp có thể truy cập được qua đường dẫn "http://mywebsite/files/test.txt".

Tôi nghĩ rằng điều này phải có thể sử dụng mod_rewrite trong .htaccess tập tin bên trong công cộng nhưng tôi đang đấu tranh để làm như vậy.

Tôi đã cố gắng thêm một quy tắc vào mặc định .htaccess được cung cấp bởi khuôn khổ Laravel. Hiện tại .htaccess trông giống như sau:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # The following rule is added by me
    RewriteRule files/(.*\.txt) /var/www/html/files/$1 [L]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Kết quả hiện tại là Lỗi máy chủ nội bộ khi cố gắng truy cập "http://mywebsite/files/test.txt". Tôi có cảm giác mình có thể đã bỏ lỡ một số cài đặt để đặt thư mục "tệp" ở chế độ công khai nhưng tôi không biết cách thực hiện.

Tôi bị mắc kẹt và nếu có ai có thể giúp tôi, tôi sẽ đánh giá cao.

Điểm:2
lá cờ jp

Bạn có thể tạo một liên kết tượng trưng

ln -s /var/www/html/files /var/www/html/public/files

Bạn sẽ cần Tùy chọn +FollowSymLinks để làm việc này. Xin lưu ý rằng tùy chọn này thêm rủi ro bảo mật vì nó cho phép truy cập các tệp bên ngoài Tài liệuRoot.

Ngoài ra, bạn có thể thêm Bí danh/tệp/var/www/html/tệp cho bạn Máy chủ ảo cấu hình cho trang web này. Đó là một tùy chọn an toàn hơn nhưng bạn không thể làm điều đó với .htaccess.

Điểm:1
lá cờ kz

Ngoài câu trả lời của @ AlexD ...

nghĩ rằng điều này phải có thể sử dụng mod_rewrite trong .htaccess tập tin

Điều này IS có thể sử dụng mod_rewrite, nhưng không phải trong .htaccess. Bạn sẽ cần thực hiện việc này trực tiếp trong cấu hình máy chủ chính (hoặc bộ chứa VirtualHost).

trong một danh mục (hoặc .htaccess) bối cảnh bạn bị hạn chế chỉ ghi lại vào đường dẫn URL. Tuy nhiên, trong một người phục vụ (hoặc Máy chủ ảo) bối cảnh bạn có thể viết lại thành đường dẫn URL hoặc một đường dẫn hệ thống tập tin tuyệt đối.

Tuy nhiên, đây không phải là nguyên nhân khiến bạn Lỗi máy chủ nội bộ...

Tệp RewriteRule/(.*\.txt) /var/www/html/files/$1 [L]

Điều này rất có thể dẫn đến một vòng lặp ghi lại (do đó phản hồi 500 Lỗi Máy chủ Nội bộ) do không được neo viết lại quy tắc mẫu cũng phù hợp với thay thế chuỗi (đường dẫn URL tương đối gốc) và do đó, đường dẫn URL được viết lại được viết lại nhiều lần ...

trong một người phục vụ bối cảnh, bạn có thể viết nó như thế này:

RewriteRule ^/files/(.+\.txt)$ /var/www/html/files/$1 [L]

(Nếu bạn không mong đợi các thư mục con của /các tập tin thư mục thì regex phải được thực hiện hạn chế hơn, vd. ([^/]+\.txt))

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.