我们有一个网站,向客户展示我们为他们制作的创意作品。我们将原始资产上传到这样的路径:
x.com/clients/clientName/campaignName/size/
我有一个PHP脚本,可以添加我们的品牌,联系信息和其他信息,并提取原始广告素材(通常是一个swf对象)。它位于此目录x.com/clients/index.php
中,它接受查询字符串参数?path
,因此它知道在哪里查找广告素材。
我正在尝试在.htaccess中进行apache重写,以便我们的设计人员可以直接上传到已知的文件夹结构,但是当你转到x.com/clients/clientName/campaignName/size/
时,它应该重写为x.com/clients/index.php?path=clientName/campaignName/size/
我目前正在使用以下重写规则,该规则适用于第一个文件夹级别,例如: x.com/clients/clientName/
成功重写,但任何后续文件夹都没有。
RewriteRule ^clients/([^/\.]+)/?$ /clients/index.php?path=$1 [L]
我的RegEx很糟糕,所以我不知所措。感谢任何帮助,谢天谢地。
答案 0 :(得分:2)
您的正则表达式仅匹配clients/xxxxxx/
等网址,因为您的模式[^/\.]+
表示one or many characters except "/" or "."
根据您的规则,它不适用于其他子目录。
您可以通过此更改规则
RewriteRule ^clients/(.+)$ /clients/index.php?path=$1 [L]
为了避免内部服务器错误(在这种情况下代码500意味着无限循环),你可以这样做
RewriteRule ^clients/index\.php$ - [L]
RewriteRule ^clients/(.+)$ /clients/index.php?path=$1 [L]
答案 1 :(得分:1)
您是否有特殊原因要使用正则表达式?在我看来,你可以抓住/客户之后发生的一切:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^(.*/)?index\.php$ [NC]
RewriteRule ^clients/(.*)$ /clients/index.php?path=$1 [L]
第二行是为了防止重定向循环,因为index.php也在文件夹/ clients中,这会导致永不停止的重定向。