Apache 將絕對 url 重定向到相對 url
所以我想從一個子文件夾載入一個網路應用程序。目前配置如下所示
<VirtualHost *:80> ServerName YOUR IP ADDRESS/DOMAIN ServerAdmin webmaster@localhost DocumentRoot /var/www/html/ <Directory /var/www/html/monica/public/> Options Indexes FollowSymLinks AllowOverride All Require all granted # Everything under this line has been added by me to try to make the redirect work RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /var/www/html/monica/public/$1 [R] </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
頁面服務正確,但由於文件包含絕對 url,它一直失敗。我對 Apache 很陌生,所以我不知道自己做錯了什麼,尋找答案是徒勞的。
如果我使 DocumentRoot
/var/www/html/monica/public/
它正常工作,但我想從子目錄訪問它,例如localhost/monica/
注意:這個 webapp 可以從基礎訪問(https://github.com/monicahq/monica/)
我想我理解您現在所指的內容(儘管您如何引用資產的範例“絕對路徑”會很有用)。我假設您正在引用您的資產,例如
/img/image.jpg
(或https://example.com/img/image.jpg
)?而實際資源位於/monica/public/img/image.jpg
? 因此,您基本上需要將所有 URL(對於靜態資產)重寫到/monica/public
子目錄。但這不會影響您的頁面間 URL 嗎?(除非您在頁面之間僅使用相對URL?)例如,代替您現有的
<Directory>
塊,嘗試以下操作。請注意Directory
路徑引用您的文件根目錄。<Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.+\.(?:jpg|png|css|js))$ /monica/public/$1 [L] </Directory>
檢查文件副檔名(靜態資產)的目的是避免對每個請求進行“文件存在”檢查(這是相對昂貴的)。
這假設您有一個
.htaccess
文件位於/monica/public/.htaccess
(如您的文件結構中所示),然後路由請求。(否則,如果資產確實不存在,這可能會導致重寫循環。)如果我使 DocumentRoot
/var/www/html/monica/public/
它正常工作,但我想從子目錄訪問它,例如localhost/monica/
然而,這聽起來你應該“修復”你的 URL 路徑(在 Laravel 中路由)而不是重寫你的資源?
更新:
你能告訴我我該怎麼做嗎?
我不確定,這似乎是 Laravel/PHP 問題?文件根目錄是
/var/www/html/monica/public/
(文件系統路徑),但您希望有效地從URL-path/monica
中的子目錄提供內容。請注意,“monica”中的“monica”與 URL 中的“monica”不同。您可以將 webapp放在文件系統的子目錄中(因此絕對文件系統路徑將是),或者您將 webapp 中的所有 URL 更改為包含在 URL 路徑的開頭。/var/www/html/monica/public/``/monica``/var/www/html/monica/public/monica``/monica/
不管你怎麼做,你的 webapp 中的所有 URL(靜態資源和所有東西)都需要 start
/monica
。所以,除了在 Laravel 中修改路由之外,我沒有看到任何其他方法。Apache 可以通過發出外部重定向來幫助將內容從文件根目錄移動到子目錄。
/monica
但這只是為了 SEO 的好處,而不是讓您的使用者一直使用(速度較慢、伺服器負載增加等)。如果我將其更改為…資產將再次停止載入。你知道為什麼嗎?
<Directory /var/www/html/monica> Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.+\.(?:jpg|png|css|js))$ /public/$1 [L] </Directory>
因為(如果我在回答開始時的假設仍然正確)您正在引用您的資產,例如
/img/image.jpg
and not/monica/img/image.jpg
。