1

.htaccess を使用して、次のように URL を書き換えています。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} !(^|&)lang=[a-z]{2}(&|$) [NC]
RewriteCond %{REQUEST_URI} !^/(en|it) [NC]
RewriteRule ^(?:[a-z]{2}/)?(.*)$ /en/$1 [L,NC,R]

RewriteRule ^([a-z]{2})/(.*)$ /index.php?lang=$1&page=$2 [L,NC,QSA]

この条件に従うために:

http://website.com -> http://website.com/en
http://website.com/en -> http://website.com/en
http://website.com/it -> http://website.com/it
http://website.com/de -> http://website.com/en

詳細については、このスレッドを参照してください。

問題は、いくつかのアセットにアクセスする必要がある場合です。たとえば、css/styles.cssをロードする必要があります。

ベースを追加して絶対パスを与えるようにベースの場所を変更しようとしました:

<base href="http://website.com/">

または、次のように入力して相対パスを設定します。

../css/styles.css

ブラウザは正しい方法でファイルを要求します。

Request URL:http://website.com/css/styles.css
Status Code:302 Found

しかし、私はファイルを取得せず、応答ヘッダーは次のとおりです。

Location:http://website.com/en/css/styles.css

この問題を解決するには?

4

1 に答える 1

2

アセットをリダイレクトする必要はありません。サイトの動作方法に応じて、特定のディレクトリのリクエストを除外するか、存在するリソース (ファイルやディレクトリなど) のリクエストを除外できます。

RewriteCond %{QUERY_STRING} !(^|&)lang=[a-z]{2}(&|$) [NC]
RewriteCond %{REQUEST_URI} !^/(en|it) [NC]
RewriteCond %{REQUEST_URI} !^/css
RewriteRule ^(?:[a-z]{2}/)?(.*)$ /en/$1 [L,NC,R]

また

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} !(^|&)lang=[a-z]{2}(&|$) [NC]
RewriteCond %{REQUEST_URI} !^/(en|it) [NC]
RewriteRule ^(?:[a-z]{2}/)?(.*)$ /en/$1 [L,NC,R]
于 2013-09-30T09:10:48.520 に答える