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

时间:2014-11-11 06:20:45

标签: apache .htaccess mod-rewrite

我不知道如何标题,但这是我的问题。

我正在尝试将多个规则转换为指向一个页面的一条规则。

该网站有一个照片目录,可以使用以下网址结构访问,图像编号必须从零开始:

(插入基本网址)/ photocategoryname / month-01-2014 / image / 1

我想(插入基本网址)/ photocategoryname / month-01-2014 / image / 0自动切换到并加载数据(插入基本网址)/ photocategoryname / month-01-2014 / image / 1

我也想(插入基本网址)/ photocategoryname / month-01-2014 / image-1转换为(插​​入基本网址)/ photocategoryname / month-01-2014 / image / 1,因为我做了一个URL重新设计,过去我使用image-1而不是image / 1,搜索引擎正在尝试检索旧文件。

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

当我使用此规则集并尝试访问(插入基本URL)/ photocategoryname / month-01-2014 / image-1时,它给了我一个重定向页面,其中新URL为(插入基本URL)/ photocategoryname / month- 01-2014 /图像/ 1 /月-01-2014 /图像-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]之前能够使此设置正常工作,但是这导致了太多的重定向,我不希望我的服务器花费资源来处理不必要的重定向。

知道我可能做错了吗?


更新:

这就是我想要实现的目标。

我想允许用户使用以下任意一个网址访问同一页面(照片):

(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]结尾。

我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

之前的方式是正确的,前4行应该有一个R=301来进行正确的重定向。

这不是一种好的做法,但如果您想在这些不同的网址下提供相同的网页,可以尝试将[NC]更改为[NC,L]