如何使用 Mod Rewrite 訪問非文件根文件夾文件?
我的網站程式碼具有以下結構
/var/www/html
-- files ---- test.txt -- app ---- SomePhpCodes.php ---- SomePhpCodes.php -- public ---- index.php ---- .htaccess
文件根目錄設置為“/var/www/html/public”,但我也希望通過路徑“http://mywebsite/files/test.txt”訪問文件。
.htaccess
我認為在裡面的文件中使用 mod_rewrite 必須是可能的,public
但我正在努力這樣做。我嘗試向
.htaccess
Laravel 框架提供的預設規則添加一個規則。電流.htaccess
如下所示:<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>
目前結果是
Internal Server Error
嘗試訪問“http://mywebsite/files/test.txt”時。我有一種感覺,我可能錯過了一些設置來公開“文件”文件夾,但我不知道該怎麼做。我被困住了,如果有人可以幫助我,我將不勝感激。
您可以創建符號連結
ln -s /var/www/html/files /var/www/html/public/files
你將需要
Options +FollowSymLinks
這個工作。請注意,此選項會增加安全風險,因為它允許訪問DocumentRoot
.或者,您可以添加到此站點
Alias /files /var/www/html/files
的配置中。VirtualHost
這是一個更安全的選擇,但您不能使用.htaccess
.
除了@AlexD 的回答…
認為這必須可以在
.htaccess
文件中使用 mod_rewrite這可以使用 mod_rewrite,但不能在
.htaccess
. 您需要直接在主伺服器配置(或 VirtualHost 容器)中執行此操作。在目錄(或
.htaccess
)上下文中,您只能重寫為 URL 路徑。但是,在伺服器(或虛擬主機)上下文中,您可以重寫為 URL 路徑或絕對文件系統路徑。但是,這不是您的原因
Internal Server Error
…RewriteRule files/(.*\.txt) /var/www/html/files/$1 [L]
這很可能導致重寫循環(因此 500 內部伺服器錯誤響應),因為未錨定
RewriteRule
模式也匹配替換字元串(相對於根的 URL 路徑),因此重寫的 URL 路徑被一次又一次地重寫。 .在伺服器上下文中,您可以這樣編寫:
RewriteRule ^/files/(.+\.txt)$ /var/www/html/files/$1 [L]
(如果您不期望目錄的子目錄,
/files
則應該使正則表達式更具限制性,例如。([^/]+\.txt)
)