.htaccess中的多个重写规则无法正常工作

时间:2014-05-29 07:09:14

标签: php apache .htaccess mod-rewrite url-rewriting

我正在尝试使用.htaccess创建漂亮的链接。我是apache的新手,无法弄清楚为什么它不起作用。

我有两页: single_picture.phpsingle_video.php

两个页面都有两个参数:name和cat_id / category_id

以下是两个例子: http://www.unclelol.com/single_picture.php?name=Real-time-images-5&cat_id=13

http://www.unclelol.com/single_video.php?name=football%20fail&category_id=22

这是我的.htaccess

 Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^pictures/([A-Za-z0-9\-_]+)/([A-Za-z0-9\-_]+)/?$ /single_picture.php?name=$2&cat_id=$1 
RewriteRule ^videos/([A-Za-z0-9\-_]+)/([A-Za-z0-9\-_]+)/?$ /single_video.php?name=$2&category_id=$1

现在原因不明。图片的重写非常完美:

http://www.unclelol.com/pictures/13/Real-time-images-5/

但视频重写会出现404错误:

http://www.unclelol.com/videos/22/football%20fail

非常感谢任何帮助。

艾哈迈尔

1 个答案:

答案 0 :(得分:1)

将您的两条规则合并为单一:

RewriteRule ^(.+)s(?=/)/([^/]+)/([^/]+)/?$ /single_$1.php?name=$3&cat_id=$2 [NE,L]

同时删除模式([A-Za-z0-9\-_]+),该模式不会像您在视频网址中那样适用于%20。而是使用匹配任何字符的([^/]+),直到达到/