2011-12-25 48 views
4

我有一系列来自不同制造商的价目表(从数据库中吐出)。他们被限制为每页100行,即:如何一次重写多个URL?

www.domain.com/products/price-lists/company1.php?page=2 
www.domain.com/products/price-lists/company2.php?page=10 

,我想重写:

www.domain.com/products/price-lists/company1/page/2 
www.domain.com/products/price-lists/company2/page/10 

我:

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^products/price-lists/company1/page/([0-9]+)/?$ products/price-lists/company1.php?page=$1 [NC,L] 
RewriteRule ^products/price-lists/company2/page/([0-9]+)/?$ products/price-lists/company2.php?page=$1 [NC,L] 

首先,这将引发404如果我尝试去/ products/price-lists/company1/page/2(它工作,如果我删除/ page /),第二,我想知道我是否可以将它们合并为一个规则:

(company1|company2[0-9]+)/? 

感谢任何帮助(这是我第一次mod_rewrite的尝试!)

+0

你的意思是你想有一个单一的规则将要处理的完整URL的不同排列? – Oded 2011-12-25 15:58:15

+0

@Oded - 是的。所以我不需要每个制造商一个重写规则 – rwb 2011-12-27 15:02:52

回答

4

试试这个:

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^products/price-lists/([a-z0-9_\-]+)(/page)?/?$ products/price-lists/$1.php?page=1 [NC,L] 
RewriteRule ^products/price-lists/([a-z0-9_\-]+)/page/([0-9]+)/?$ products/price-lists/$1.php?page=$2 [NC,L] 

的第一条规则将检查如果一个页面是有或没有数字和去第1的([a-z0-9_\-]+)将使用把公司,因此,如果你把:

http://www.domain.com/products/price-lists/stackoverflow/page/2 

/products/price-lists/stackoverflow.php将打开使用$_GET['page'] = 2

+0

谢谢。根据你的回答,我结束了: 'RewriteRule^price-lists /([a-z0-9 - ] +)/ page /?$ price-lists/$ 1.php?page = 1 [NC,L] RewriteRule^price-lists /([a-z0-9 - ] +)/ page /([0-9] +)/?$ price-lists/$ 1.php?page = $ 2 [NC,L]' 您有什么机会可以解释:'([a-z0-9 _ \ - ] +)(/ page)?/'(我没有理解它,所以将其改为上面看到的内容,这似乎工作 – rwb 2011-12-27 14:59:52

+0

欢迎您。([a ....])检查任何字母,数字,下划线和短划线,并且在$ 1中。另一个是可选的,因为最终你可以寻找页面或页面或者什么也不是 – 2011-12-27 23:38:02

1

问题是url的部分与php文件的文件名相同(没有.php)。使用以下内容来纠正。

options -multiviews