2014-09-03 92 views
1

我创建了一个新函数,希望实现面包屑和更好的URL结构。从htaccess重写规则排除多个路径

此之前,我有以下规则:

RewriteRule ^pages/([a-z0-9,&-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC,QSA,B] 

这意味着,

www.example.com/pages/contact 

从数据库中返回了一篇文章。现在我想改变这种做法,我的网址看起来像

www.example.com/categoryname/pagename 

所以我对这个工作重写规则:

RewriteRule ^([^/]+)/([^/]+)$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L] 

问题是这样的规则被造成任何图像被包括来自/图像加载包括该文章的模板。

我能想到的三种可能的解决方案,而不是实际的代码:

1)我可以创建类别名称的阵列?然后我可以以某种方式使RewriteRule只适用于这些名称。

2)创建一个包含一些全局设置的类。在这有一些PHP,定义或设置图像路径。我能想到的就是;

define("IMAGE_PATH", "//example.com/images"); 

3)添加一些东西到Htacces文件中,从规则中排除某些路径。

我知道MVC或类似的会取得更好的结果。这是关于我的学习,请告诉我,如果我在这里挖了一个洞!

非常感谢, 亚当

回答

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] 

NB,增加了“ B'转换为标志,这就避免了非字母数字字符,如'&'。

+1

这就是完美的工作!你介意解释一下哪部分代码会跳过所有现有的文件/目录? – atoms 2014-09-03 07:33:11

+1

我在回答中添加了一些评论。基本上'%{REQUEST_FILENAME}!-f'表示它是否不是文件,'%{REQUEST_FILENAME}!-d'表示如果请求不是用于目录。 – anubhava 2014-09-03 07:34:57

+1

完美的作品,感谢阐述将标记您的评论 – atoms 2014-09-03 07:35:46