Php 从htaccess重写规则中排除多个路径
我创建了一个新函数,希望实现面包屑和更好的URL结构 在此之前,我有以下规则:Php 从htaccess重写规则中排除多个路径,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,我创建了一个新函数,希望实现面包屑和更好的URL结构 在此之前,我有以下规则: RewriteRule ^pages/([a-z0-9,&-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC,QSA,B] 这意味着 www.example.com/pages/contact 从数据库返回了一篇文章。现在我想改变这个,让我的URL看起来像 www.example.com/categoryname/pagename
RewriteRule ^pages/([a-z0-9,&-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC,QSA,B]
这意味着
www.example.com/pages/contact
从数据库返回了一篇文章。现在我想改变这个,让我的URL看起来像
www.example.com/categoryname/pagename
因此,我的工作重写规则是:
RewriteRule ^([^/]+)/([^/]+)$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L]
问题是此重写规则导致从/images中包含的任何图像加载文章的包含模板
我可以想出三种可能的解决方案,但不是实际的代码:
1) 我可以创建一个类别名称数组吗?然后我就可以让重写规则只适用于这些名字
2) 创建一个类以包含一些全局设置。在本文中,我们将使用一些php来定义或设置图像路径。我所能想到的就是
define( "IMAGE_PATH", "//example.com/images" );
3) 向Htacces文件中添加某些内容以从规则中排除某些路径
我知道MVC或类似的软件会取得更好的效果。这是关于我的学习,请告诉我我是否在这里挖了个洞
非常感谢,,
Adam您可以像这样跳过此重写中的所有现有文件和目录,以防止所有图像受到此新规则的影响:
# 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”,这将转义非字母数字字符,如“&”。这非常有效!你介意解释一下代码的哪一部分使它跳过所有现有的文件/目录吗?我在回答中添加了一些注释。基本上
%{REQUEST\u FILENAME}-f
表示如果它不是一个文件并且%{REQUEST\u FILENAME}-d
表示如果请求不是为了目录。工作正常,感谢您的详细说明,我们将标记您的评论