Rumah > Soal Jawab > teks badan
P粉0356005552023-09-04 17:09:20
Baiklah, jawab soalan saya sendiri sekiranya ada yang mengalami masalah yang sama. Saya rasa penyelesaian saya agak godam, jadi sila hantar jawapan bukan godam.
Mula-mula, saya mengubah suai konfigurasi nginx:
location /app/ { rewrite /app/(.*) /app/ break; proxy_pass http://127.0.0.1:89/; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto "https"; proxy_set_header X-Forwarded-Port "443"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
Kemudian saya mengubah suai konfigurasi Nette untuk merangkumi semua proksi (mungkin sebenarnya tidak diperlukan):
http: proxy: 0.0.0.0/0
Saya turut menambah laluan "apl" dalam kod penghala (bukan sebagai awalan pilihan, tetapi sebagai laluan biasa):
$router = new RouteList; $router->addRoute('app/<presenter>/<action>[/<id>]', 'Homepage:default'); $router->addRoute('<presenter>/<action>[/<id>]', 'Homepage:default'); return $router;
Juga mengubah suai kaedah permulaan kod BasePresenter:
$this->template->basePath = '/app'.$this->template->basePath;
Akhir sekali, saya mengubah suai fail .htaccess untuk menulis semula URL semua sumber statik ke laluan yang tidak mengandungi bahagian "apl":
# Default Nette htaccess contents RewriteEngine On RewriteRule /\.|^\. - [F] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L] # Added this line under the default Nette htaccess file RewriteRule ^app(/.*|$) [NC,L]
Hos maya Apache kekal tidak berubah.
Dengan cara ini, nginx menghantar URL permintaan lengkap (termasuk "apl") ke Apache dan Apache memanggil penghala Nette dengan awalan "aplikasi". Penghalaan kini berfungsi dengan baik kerana "aplikasi" adalah sebahagian daripada URL dan bahkan menyedarinya oleh Nette (kerana ia sebenarnya terdapat sepenuhnya dalam pengepala permintaan). Ini menyebabkan $basePath
dan pautan/ubah hala ke berfungsi.
Walau bagaimanapun, sumber statik tidak disampaikan melalui penghala Nette, oleh itu awalan app/
前缀会导致 Apache 找不到该文件并报告 404。这就是添加重写规则的原因从静态资源的 URL 中删除 app/
.
Ia meretas, tetapi ia berfungsi untuk kedua-dua akses proksi dan bukan proksi.