使用htaccess重写规则访问相关的CSS / JS文件

时间:2014-01-07 18:49:11

标签: php .htaccess mod-rewrite

我最近被问到是否可以让我的朋友服务器地址更加用户友好。他目前的网址看起来像这样:

http://wwww.example.com/site/index.php?page=home
http://wwww.example.com/site/index.php?page=about/john
http://wwww.example.com/site/index.php?page=portfolio/concept-art/2013

他希望他们看起来像这样

http://wwww.example.com/site/home
http://wwww.example.com/site/about/john
http://wwww.example.com/site/portfolio/concept-art/2013

我觉得这很简单所以我在重写之后写了这个。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !/(admin|css|fonts|ico|include|js)/
RewriteRule ^([^_]*)$ index.php?page=$1 [L]

似乎适用于基本链接,如

http://wwww.example.com/site/home

但对于像这样的事情

http://wwww.example.com/site/about/john

没有任何css或js会加载。所以我现在通过制作所有文件的绝对路径来修复它,但我担心我的朋友会添加一个新的插件或者其他东西而忘记他必须使它成为绝对路径。

我的问题

我的htaccess文件中是否有可以更改或添加的内容以使用相对路径加载css和js文件?如果是这样我还需要做什么?

2 个答案:

答案 0 :(得分:5)

最好使用此规则:

RewriteEngine On
RewriteBase /site/

RewriteCond %{REQUEST_FILENAME} !/(admin|css|fonts|ico|include|js)/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)/?$ index.php?page=$1 [L,QSA]

然后对于css / js / images更好地在你的css,js,图像文件而不是相对文件中使用绝对路径。这意味着您必须确保这些文件的路径以http://或斜杠/开头。

或者您可以尝试在页面标题中添加:

<base href="/" />

OR

<base href="http://domain.com/site/" />

答案 1 :(得分:1)

  

我的htaccess文件中是否有可以更改或添加的内容以使用相对路径加载css和js文件?如果是这样我还需要做什么?

您只需在页眉中添加正确的相对URI基础:

<base href="/site/" />

或者你可以使用mod_rewrite(不可取)来强制重定向它们:

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js)/(.*)$ $2/$3 [L]