我创建了一个新功能,希望能够实现面包屑和更好的URL结构。
在此之前,我有以下规则:
RewriteRule ^pages/([a-z0-9,&-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC,QSA,B]
这意味着;
www.example.com/pages/contact
从DB返回了一篇文章。现在我想改变它,所以我的网址看起来像
www.example.com/categoryname/pagename
所以我的工作重写规则:
RewriteRule ^([^/]+)/([^/]+)$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L]
问题是这个RewriteRule会导致/ images中包含的任何图像加载文章的附带模板。
我可以想到三种可能的解决方案,但不是实际的代码:
1)我可以创建一个类别名称数组吗?然后,我可以以某种方式使RewriteRule仅适用于这些名称。
2)创建一个包含一些全局设置的类。在这有一些PHP定义或设置图像路径。我能想到的只是;
define( "IMAGE_PATH", "//example.com/images" );
3)向Htacces文件添加内容以从规则中排除某些路径。
我知道MVC或类似的会取得更好的结果。这是关于我的学习,请告诉我,如果我在这里偷了一个洞!
非常感谢, 亚当
答案 0 :(得分:1)
您可以通过此重写跳过所有现有文件和目录,以防止所有图片受到此新规则的影响:
# skip all existing files
RewriteCond %{REQUEST_FILENAME} !-f
# skip all existing directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L,QSA,B]
注意,将'B'添加到标记中,这会转义非字母数字字符,例如'&'。