基本或相对路径不适用于.htaccess重写规则

时间:2013-09-30 08:58:50

标签: .htaccess mod-rewrite url-rewriting path url-redirection

使用.htaccess我会以这种方式重写网址:

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

有关详情,请参阅this thread

现在问题是我必须访问某些资产。例如,我必须加载 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

如何解决这个问题?

1 个答案:

答案 0 :(得分: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]