mod_rewrite RewriteRule和html链接

时间:2013-10-31 12:28:04

标签: php html apache .htaccess mod-rewrite

我正在创建一个新网站,它有一些PHP。该网站基本上会这样工作,我有/index.php?page=category_page。类别将是类别,页面将是子类别/实际页面的排序。重写的规则如下所示:/ category / page。

我有这个:

RewriteEngine On
RewriteRule ^category/([^/]*)$ index.php?page=$1 [L]

但我不知道如何分类和页面,任何帮助? 第二件事是,在我的index.php中(例如)我从外部文件中获得了一些css:

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

这不适用于重写规则,因为它尝试加载不存在/不重写的/category/page/style/style.css。我如何使它工作?我知道一个简单的解决方法是放置/style/style.css,这将从网站的根目录加载,但我目前正在从子目录运行网站,例如example.com/new/index.php所以这不是一个选项。对此有何帮助?

2 个答案:

答案 0 :(得分:3)

问题1:

您可以在正则表达式中定义多个参数,例如类别&amp;页面(见下文)。

使用如此广泛的重写规则,您可能希望添加一个不重写样式表,图像和其他资源的条件。

我还修改了你的模式,只匹配字母,数字,连字符和下划线,这样可以防止在你的类别或页面名称中使用非标准字符。

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(js|css|png|gif|jpg)$ [NC]
RewriteRule ^([\w\d\-]+)/([\w\d\-]+)/?$ index.php?category=$1&page=$2 [L]

问题2:

您在href中使用了相对网址,它将样式表的位置附加到浏览器中定义的当前位置(/ category / page /)。

即使服务器端正在重写该URL,浏览器也不知道重写。

如果您使用绝对URL,您的浏览器将定义相对于BASE网址的URL(/)。

试试这个:

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

答案 1 :(得分:1)

使用此RewriteRule

RewriteEngine On
RewriteRule ^(.+)/(.+)/$ index.php?page=$1_$2 [L]