2011-04-06 93 views
0

的重写规则是这样的:重写规则和相对路径样式表的问题

RewriteRule ^(.*)/(.*)$ index.php?search=$1&Page=$2 

样式表的参考是这样的:

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

当我穿上样式表重写被忽略。请帮我写出正确的规则,谢谢!

这是在.htaccess在根做/

+1

你能否扩展你的问题并告诉我们你想用这个重写规则来达到什么目的?实际上,它会通过/来接收每个请求并重写它。 – 2011-04-06 18:44:05

+0

是的。我想拥有mydomain.com/searchterm/page URL结构,而忽略像/ css /和/ images /和/ includes /等目录中的文件。 – Kevin 2011-04-06 18:54:20

+0

要清楚,'$ 1'将包含所有* final *斜杠在URL中,而不是第一个,因为'。*'将匹配任何字符,*包括*任何斜线(除了最后一个,因为它需要匹配整个模式)。这可能是你期望的,但它可能不是,所以我觉得值得一提。 – AgentConundrum 2011-04-06 19:02:24

回答

1

我假设你不想重定向任何请求实际存在的文件,而不仅仅是CSS文件。例如,如果你有一个带有图像文件的/images目录,你可能不希望你的PHP脚本处理这个目录,而不是你希望它处理你的CSS文件。

这些“标准”规定,提供的是:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

这些条件语句其中说:“如果下列条件为假,忽略接下来RewriteRule被评估的实际情况是检查,以确保。请求不是针对实际存在的文件或目录

这意味着,当您请求/css/style.css时,Apache将会看到有一个该名称的文件已存在,因此它将忽略您的重写并提供文件直接。

+0

这也不错,可能比我提出的更适合你的情况。如果你最终需要多个RewriteRule指令,这种方法可能会变得很笨重,但是如果你只是想将一个RewriteRule重写到index.php,这种方式应该可以很好地为你工作。 – Andrew 2011-04-06 18:53:17

+0

我喜欢这种方法,我需要将一些文件移动到/ include /目录下才能完成这项工作。页面部分通过ajax填写并具有URL参数。当我打开它时,它们似乎打破了。 – Kevin 2011-04-06 19:26:21

1

链接到您的样式表被改写为index.php文件。为了避免这种情况,开始是这样的:

RewriteRule ^css/ - [NC,L] 

这将导致不被改写的CSS目录什么(除非有某种原因.htaccess文件中的CSS,这将是不寻常的)。

+0

Andrew你可以用这个来忽略一个特定的页面,而不仅仅是一个目录吗?例如/ajax.php – Kevin 2011-04-06 19:44:49

+0

@凯文是的,你可以。连字符只意味着“不要重写匹配”,而L标志(“最后”)意味着不再处理任何指令。所以,像RewriteRule^ajax.php - [NC,L]应该工作。 – Andrew 2011-04-06 19:48:55