[英]Apache mod_rewrite RewriteCond to by-pass static resources not working
[英]Apache RewriteCond not working for static files
我在不同語言(西班牙語和英語)的不同目錄中有兩個網站副本,目錄結構如下
+ /var/www/website
|- es
|- en
es
目錄服務於網站的西班牙語版本,而en
服務於英文版本(默認語言)。
URL 模式就像
# English version
https://example.com/
https://example.com/en/ -> Redirects to https://example.com/
# Spanish version
https://example.com/es/
static 文件僅從各自的目錄提供。
現在,我有以下Apache2
配置
<VirtualHost *:443>
# The primary domain for this host
ServerName example.com
DocumentRoot /var/www/website
<Directory /var/www/website>
Require all granted
AllowOverride all
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteRule ^$ /es/ [R]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [R]
RewriteCond %{HTTP:Accept-Language} !^en [NC]
RewriteCond %{HTTP:Accept-Language} !^es [NC]
RewriteRule ^$ /en/ [R]
</Directory>
</VirtualHost>
我在配置方面遇到了一些問題
https://example.com/es/
and https://example.com/en/
are working but static files are not loading and the URL for the static files looks like https://example.com/image.png
which必須是https://example.com/es/image.png
(西班牙語)和https://example.com/en/image.png
(英語)https://example.com/en/
應該被重定向到https://example.com/
並且應該提供英文網站,而相反的情況正在發生。讓我們首先了解這里發生了什么。
有了這樣的規則
RewriteRule ^$ /es/ [R]
您正在將請求重定向到/
到/es/
。
重定向的意思是,服務器會告訴瀏覽器go 在其他地方搜索內容。
然后瀏覽器將向/es/
發送另一個請求。 這不會被重寫或重定向,因為沒有匹配的規則。
您的 html 文件顯然包含具有絕對 URL 的引用,如下所示:
<img src="/image.png" />
因此,您的瀏覽器將發送一個對/image.png
的請求,該請求不會被重定向,也不會被重寫。
有不同的方法可以解決這個問題:
像這樣:
<img src="/es/image.png" />
這是最好的解決方案恕我直言。 根據您生成內容的方式,可能會有一個選項來設置項目的基礎 URL。
您可以考慮是否希望 apache 為您進行這些替換,例如使用mod_substitute
,但在某些情況下您可能無法使用這種方法。 我不會推薦它。
IE
<img src="image.png" />
乍一看這聽起來不錯,但如果您的頁面結構復雜,可能會變得很難看,例如/es/foo/bar/somepage.html
需要<img src="../../image.png" />
參考/es/image.png
。
如果您想在/es/foo
和/es/foo/
下提供相同的內容(不重定向其中之一),這可能會變得特別棘手。 兩者需要不同的圖像相對路徑。
/image.png
的請求理論上,您可以讓 Apache 將對 /image.png 的請求重寫為/image.png
或/es/image.png
, /en/image.png
取決於接受語言 header。
我不建議這樣做,因為它會導致奇怪的行為。 例如,假設用戶有意識地決定訪問/en/
,即使他的語言設置更喜歡西班牙語。 然后,瀏覽器將請求/image.png
,服務器將根據語言設置提供圖像的西班牙語變體。 而 HTML 顯示的是英文內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.