我正在创建一个新网站,它有一些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所以这不是一个选项。对此有何帮助?
答案 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]