2012-01-14 57 views
3

我有一些问题重写URL-S的.htaccess排除重写CSS和图像

我.htacces文件:

RewriteEngine On 
RewriteBase /bsc/ 
RewriteRule ^(.+/?)$ index.php?url=$1 [NC,QSA,L] 

我的文件和文件夹结构:

bsc/ 
---|.htaccess 
---|index.php 
---|css/ 
-------|style.css 
---|images/ 
----------|logo.png 
----------|image1.jpg 
----------|image2.jpg 
---|controller/ 
--------------|bootstrap.php 
... 

当我有下一个环节

localhost/bsc/page.html 

比我的CSS工作还是可以上班的。 但是,当我旁边的链接:

localhost/bsc/page/subpage.html 
localhost/bsc/page/subpage/subsubpage.html 
localhost/bsc/page/subpage/subsubpage/subsubsubpage.html 

我不能让CSS工作,CSS被重定向到

localhost/bsc/page/css/style.css 
localhost/bsc/page/subpage/css/style.css 
localhost/bsc/page/subpage/subsubpage/css/style.css 

的问题,第二部分是我的链接不具有相同的扩展或任何延伸。 接下来的情况是可能的:

localhost/bsc/page/subpage 
localhost/bsc/page/subpage/ 
localhost/bsc/page/subpage.php 
localhost/bsc/page/subpage.html 
localhost/bsc/page/subpage/subsubpage 
localhost/bsc/page/subpage/subsubpage/ 
localhost/bsc/page/subpage/subsubpage.php 
localhost/bsc/page/subpage/subsubpage.html 
... 

现在定义重写规则正在为不同的链接,但如何添加排除规则的CSS和图像?


我得到下次对CSS工作,为我所有条件的.htaccess:

RewriteEngine On 
RewriteBase /bsc/ 
RewriteCond %{REQUEST_FILENAME} !\.css 
RewriteRule ^(.+/?)$ index.php?url=$1 [NC,QSA,L] 

阅读评论后一段时间,我得到下一个.htaccess文件有没有那么坏的结果:

RewriteEngine On 
RewriteBase /bsc/ 
RewriteRule ^(.+/?)?(/|\.htm|\.php|\.html|/[^.]*)$ index.php?url=$1 [NC,QSA,L] 

和我的链接标签:

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

现在只有一个条件的URL,当我无法得到正确的URL请求。接下来URL没有收到最后一个参数:

localhost/bsc/page/subpage 
localhost/bsc/page/subpage/subsubpage 

我没有收到子页面subsubpage,其他的条件下工作。在这种情况下,Apache和托盘的.htaccess查找文件或文件夹....

是否可以添加缺少的条件或者是有可能使一些简单的重写规则或多个规则

回答

9

你可能只需要使用绝对URL为你的CSS,

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

代替

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

把斜线盈迫使它的URL的“根”,从而使整个子页面保持一致。

+0

缺少斜线'/'有帮助。 – Miroslav 2012-01-14 20:36:38

+0

@MiroslavGojic很高兴听到:)我看到你刚刚加入,如果你可以选择答案作为正确的答案,我们可以得到这个问题关闭:) ..只是为了.. – Tehnix 2012-01-14 20:39:34

+0

现在是95%的解决方案和我必须等待8个小时才能将我的答案提交给我,将会有新的.htaccess和一个缺失条件。 – Miroslav 2012-01-14 20:53:46

0
  1. 添加的条件RewriteCond %{REQUEST_FILENAME} !-f之前你的重写。
  2. 你应该包括与src="/css/style.css"和NOT src="css/style.css"(注意失踪开始/ CSS。
+0

的RewriteCond%{} REQUEST_FILENAME!-f,我托盘避免这种 – Miroslav 2012-01-14 20:37:06

+0

为什么尽量避免行? – Wrikken 2012-01-14 20:41:48

+0

如果我没有错误%{REQUEST_FILENAME}!-f将允许直接访问其他文件上的所有文件 - 如果文件存在于路径请求中,它将不会重写请求。但改变条件!-f与!\ .css将明确允许CSS文件,并且我可以让我的例外为图像或其他文档文件添加更多条件。 – Miroslav 2012-01-17 07:45:57

4

我将网址重写应用于核心php中的项目。我面临同样的问题。 CSS,Js和图像没有得到加载。我用这个,它为我工作。 Source

# Allow any files or directories that exist to be displayed directly 
RewriteCond ${REQUEST_URI} ^.+$ 
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR] 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule^- [L]