CSS,JS和图像不会显示漂亮的网址

时间:2015-01-02 15:41:01

标签: apache .htaccess url mod-rewrite redirect

我正在尝试通过htaccess文件重写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

4 个答案:

答案 0 :(得分:6)

当您使用相对网址时,浏览器将使用其加载的资源的网址动态创建完整的网址。换句话说:它使用地址栏中显示的URL。在您的情况下(www.domain.com/subfolder/index.php/key),它会尝试加载相对于www.domain.com/subfolder/index.php/的任何相对网址。但是,您的资源不在那里。

您有两种方法可以解决此问题:

  • 将您的相对网址转换为绝对网址,至少是域根目录的绝对网址。 <img src="img/unicorn.png">之类的内容应该转换为<img src="/path/to/img/unicorn.png">

  • 为头部元素添加基础。将使用此基础而不是资源的URL来计算完整的URL。您应该将<base href="/">添加到<head>元素中。然后/将用作任何相对网址的基础。

答案 1 :(得分:1)

您是否尝试过基本网址?这是我遇到的最佳解决方案。只需将其中一个放在头部,然后您甚至可以为其提供ID并使用javascript访问该URL。

<base id='baseElement' href="your path goes here">  <!--possibly generated with serverside code-->

使用jquery访问

var base = $('#baseElement').attr('href');

答案 2 :(得分:1)

实际上有一个.htaccess的解决方案!

假设您的index.php位于/mysite/且您的资源文件位于/mysite/scripts//mysite/images//mysite/style/之类的地雷中,您可以这样:< / p>

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 - how to exclude directory from rewrite rule

答案 3 :(得分:0)

此外,您可以尝试将此添加到您的HTaccess:

RewriteBase /