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

Rob*_*osh 2 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
Run Code Online (Sandbox Code Playgroud)

他希望他们看起来像这样

http://wwww.example.com/site/home
http://wwww.example.com/site/about/john
http://wwww.example.com/site/portfolio/concept-art/2013
Run Code Online (Sandbox Code Playgroud)

我认为这很简单,所以我在重写之后写了这个.

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

这似乎适用于基本链接

http://wwww.example.com/site/home
Run Code Online (Sandbox Code Playgroud)

但对于这样的事情

http://wwww.example.com/site/about/john
Run Code Online (Sandbox Code Playgroud)

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

我的问题

有什么我可以改变或添加到我的htaccess文件中以获取css和js文件加载相对路径?如果是这样我还需要做什么?

anu*_*ava 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]
Run Code Online (Sandbox Code Playgroud)

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

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

<base href="/" />
Run Code Online (Sandbox Code Playgroud)

要么

<base href="http://domain.com/site/" />
Run Code Online (Sandbox Code Playgroud)