htaccess RewriteBase不能正常工作

时间:2013-10-11 05:10:45

标签: .htaccess

对于开发,我将我的站点设置在名为“staging”的子目录中。例如,所有JS和CSS引用都指向/css/styles.css(注意/在css之前)。

出现的问题是当我在/ staging / contact /目录中时,联系页面试图加载“/staging/contact/css/styles.css”,而应该在“/ staging / css”中加载/styles.css”。

我曾尝试通过htaccess重写基础,但它不起作用。我正在使用:

RewriteEngine On
RewriteBase /staging/

当我在联系页面上查看源代码时(因为它没有在任何CSS / JS中加载),它仍然引用/staging/contact/css/styles.css。我在这做错了什么? :/

2 个答案:

答案 0 :(得分:2)

将此代码放入 DOCUMENT_ROOT/.htaccess(高于/阶段/级别)

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/staging/ [NC]
RewriteRule \.(?:jpe?g|gif|bmp|ico|png|tiff|css|js)$ /staging%{REQUEST_URI} [L,R=301,NC]

然后无需更改您的css / JS网址,也无需在HTML中使用<BASE>标记。

答案 1 :(得分:1)

您的脚本和样式可能使用相对URI链接。例如:

<link rel="stylesheet" href="css/style.css" type="text/css" />

您需要在网页标题中添加基础:

<base href="/staging/" />

或者,如果这些都不是一个选项,您可以尝试在htaccess文件的顶部添加额外的重写规则:

RewriteBase /staging/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(css|js)/([^/]+)\.(js|css)$ $2/$3.$4 [R=301,L]

正在暂存的htaccess文件。