0

我正在使用以下 RewriteRules :

RewriteRule ^([a-zA-Z0-9]+)$ page.php?p=$1
RewriteRule ^e/([a-zA-Z0-9]+)$ edit.php?p=$1

第一个工作正常:输入 mysite.com/id 时,它会在服务器端加载 mysite.com/page.php?p=id。

第二个也可以:当我输入 mysite.com/e/id 时,它会加载 mysite.com/edit.php?p=id (如预期的那样)。但在这种情况下,edit.php 无法找到任何外部文件,例如我的 css 文件。

<link rel="stylesheet" type="text/css" href="style.css" />

执行以下任一操作时:

<link rel="stylesheet" type="text/css" href="../style.css" />

或者简单地删除 RewriteRule 中的目录,例如:

RewriteRule ^e_([a-zA-Z0-9]+)$ edit.php?p=$1

它解决了这个问题。

现在我不明白为什么我的edit.php无法找到外部文件,即使它加载在服务器端(mysite.com/)的正确路径上,而不是像在额外目录中显示的url(在本例中为mysite 。来/ )。

4

2 回答 2

4

您可以为所有站点的路径使用基本 url,如下所示:

<base href="http://yoursite.com/blog/" />

或者

<base href="/blog/" />

然后从基础编写相对路径:

<a href="rule/foo/">...</a>

另外,您必须格外小心那些“全部接受”模式,因为如果使用不当,它们可能会与样式表、图像和其他媒体发生冲突。将扩展名附加到模式或排除媒体可能是可能的修复。

于 2012-07-10T10:17:37.223 回答
0

使用时必须写完整路径而不是相对路径mod_rewite

参考

apache mod rewrite 又
一个
初学者指南

于 2012-07-10T10:15:40.103 回答