mod_rewrite和文件路径

时间:2011-08-31 20:41:51

标签: .htaccess mod-rewrite relative-path

我在haccess中使用mod_rewrite制作干净的URL。工作目录为webroot/subdir,htaccess位于subdir

我对主文件夹

的工作正常
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^projects/([0-9]+)$ ?action=projects&id=$1
RewriteRule ^projects ?action=projects

RewriteRule ^clients ?action=clients
RewriteRule ^admins ?action=admins
RewriteRule ^settings ?action=settings

所以这些链接就像webroot/subdir/projectswebroot/subdir/settings一样,并且可以正常工作。

我的问题出现在我需要添加ID的projects行。当我点击一个类似于webroot/subdir/projects/284的链接时,我的所有样式表和图像都会中断。我的CSS设置如下:

<link rel="stylesheet" href="resources/css/reset.css" />
<link rel="stylesheet" href="resources/css/main.css" />
<link rel="stylesheet" href="resources/css/buttonPro.css" />

有解决方法吗?我的重写规则错了吗?

1 个答案:

答案 0 :(得分:2)

假设您的resources文件夹也在webroot/subdir,您需要建立链接绝对路径。当页面更改为projects/([0-9]+)时,即使正在重写路径,您的工作目录现在也变为webroot/subdir/projects,因此它正在尝试查找不存在的webroot/subdir/projects/resources样式表

/添加到您位置的开头应该有效:

<link rel="stylesheet" href="/resources/css/reset.css" />
<link rel="stylesheet" href="/resources/css/main.css" />
<link rel="stylesheet" href="/resources/css/buttonPro.css" />

如果您的资源文件夹位于home / root目录之外,则需要指定该目录的完整路径,如下所示:

<link rel="stylesheet" href="/webroot/subdir/resources/css/reset.css" />
<link rel="stylesheet" href="/webroot/subdir/resources/css/main.css" />
<link rel="stylesheet" href="/webroot/subdir/resources/css/buttonPro.css" />