Apache 将多个mod重写规则重定向到一个

Apache 将多个mod重写规则重定向到一个,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我不知道如何命名这个问题,但这是我的问题 我试图将多条规则转换为指向一页的一条规则 该网站有一个照片目录,最好使用以下url结构访问,图像编号必须以零开头: (插入基本url)/photocegoryname/month-01-2014/image/1 我希望(插入基本url)/photocegoryName/month-01-2014/image/0自动切换到(插入基本url)/photocegoryName/month-01-2014/image/1并从中加载数据 我还希望(插入基本url)

我不知道如何命名这个问题,但这是我的问题

我试图将多条规则转换为指向一页的一条规则

该网站有一个照片目录,最好使用以下url结构访问,图像编号必须以零开头:

(插入基本url)/photocegoryname/month-01-2014/image/1

我希望(插入基本url)/photocegoryName/month-01-2014/image/0自动切换到(插入基本url)/photocegoryName/month-01-2014/image/1并从中加载数据

我还希望(插入基本url)/photocegoryName/month-01-2014/image-1转换为(插入基本url)/photocegoryName/month-01-2014/image/1,因为我重新设计了url,过去我使用image-1而不是image/1,搜索引擎正在尝试检索旧文件

我还想处理意外添加额外斜杠的情况

当我使用此规则集并尝试访问(插入基本url)/photocegoryName/month-01-2014/image-1时,它给了我一个重定向页面,新url为(插入基本url)/photocegoryName/month-01-2014/image/1/month-01-2014/image-1

RewriteRule ^(.+)/(.+)-([0-9]+)-([0-9]+)/image-([0-9]+)(/)?$ /$1/$2-$3-$4/image/$5 [NC]
RewriteRule ^(.+)/(.+)-([0-9]+)-([0-9]+)/([0-9]+)(/)?$ /$1/$2-$3-$4/image/$5 [NC]
RewriteRule ^(.+)/(.+)-([0-9]+)-([0-9]+)/([0-9]+)/(.+)$ /$1/$2-$3-$4/image/$5 [NC]    
RewriteRule ^(.+)/(.+)-([0-9]+)-([0-9]+)/image/0(/)?$ /$1/$2-$3-$4/image/1 [NC]
RewriteRule ^(.+)/(.+)-([0-9]+)-([0-9]+)/image/([0-9]+)$ /photo.php?TITLE=$1&DATE=$2-$3-$4&PHOTONUMBER=$5 [NC,L]
我想做的是尽量减少重定向到1。当我在前4条规则中使用[R=301,NC,L]而不是[NC]时,我能够让这个设置正常工作,但是这导致了太多的重定向,我不希望我的服务器在处理不必要的重定向上花费资源

知道我做错了什么吗


更新:

以下是我想要实现的目标

我想允许人们使用以下任意一个URL访问同一页面(照片):

(insert base url)/photocategoryname/month-##-####/image#
(insert base url)/photocategoryname/month-##-####/image/#
(insert base url)/photocategoryname/month-##-####/image-#
(insert base url)/photocategoryname/month-##-####/photo#
(insert base url)/photocategoryname/month-##-####/photo/#
(insert base url)/photocategoryname/month-##-####/photo-#
(insert base url)/photocategoryname/month-##-####/picture#
(insert base url)/photocategoryname/month-##-####/picture/#
(insert base url)/photocategoryname/month-##-####/picture-#
我编写了PHP代码,可以帮助用户重定向到正确的URL:

(insert base url)/photocategoryname/month-##-####/image/#
这段旧代码作为重写规则的第二个参数,但只适用于一个URL

^(.+)/(.+)-([0-9]+)-([0-9]+)/image/([0-9]+)$
但服务器上似乎完全忽略了这一点:

^([^/]+)/([A-Z0-9]+)-([0-9]+)-([0-9]+)/(image|photo|picture|photograph|pic|)(-|/|)([0-9]+)/*$
两行代码都以[NC,L]结尾


我可能做错了什么?

您以前的做法是正确的,前4行应该有一个
R=301
,以便正确重定向


这不是一个好的做法,但是如果您想在这些不同的URL下使用相同的页面,您可以尝试将
[NC]
更改为
[NC,L]

,如果我接受您的建议,并且我的代码的第一行与输入匹配,那么执行不会在那里停止,然后忽略后面的代码行吗?是的。你希望发生什么?看我的问题。我为你修改了它。regex101.com声称,如果我在/前面加上\,我的新代码就可以工作了。然而,在我的旧代码中,我不必在前面加前缀。我想知道为什么现在。我迷路了。