当两个文件位于同一文件夹中时,识别RewriteRule的可能方法是什么?

时间:2011-11-16 03:01:52

标签: php apache .htaccess

好吧这听起来像是stackoverflow上最糟糕的问题,但现在就是。

offers文件夹中,我有这些文件:

product.php
category.php

要显示产品,我输入domain.com/offers/product.php?id=1
以显示类别,我输入domain.com/offers/category.php?id=1

因为这个网址看起来很难看,所以我使用.htaccess重写了例如product.php

RewriteEngine On
RewriteRule ^([a-z0-9]+)?$ product.php?id=$1 [NC,L]

这给了我一个domain.com/offers/1

由于product.phpcategory.php位于同一文件夹中并且都获得了数字变量,因此意味着它无法正确执行。

所以可能的方法是为slug设置一个category.php,并为id保留product.php,然后为其编写一些代码。

我的问题是,这是唯一的方法吗?

更新
我没试过,但是如果我将product.php?pid=1和另一个category.php?cid=1作为一个怎么办?

2 个答案:

答案 0 :(得分:2)

您需要在网址中区分它们。该方案将使URL成为:

example.com/offers/category/1
example.com/offers/product/99

完成途径:

RewriteEngine On
RewriteRule ^offers/(product|category)/([a-z0-9]+)?$ $1.php?id=$2 [NC,L,QSA]

第一个组(product|category)捕获目标脚本,该脚本已转换为$1.php。第二组被转换为相关的id。

更新

您不必将它们显示为单独的目录/products, /categories,但您必须有某种方法来区分它们。相反,您可以在ID号的开头放置pc

example.com/offers/c1
example.com/offers/p99

完成途径:

RewriteEngine On
RewriteRule ^offers/p([a-z0-9]+)?$ product.php?id=$1 [NC,L,QSA]
RewriteRule ^offers/c([a-z0-9]+)?$ category.php?id=$1 [NC,L,QSA]

或者你可以将它们扩展到

答案 1 :(得分:0)

您在显示的网址中需要一些差异。有点像...

RewriteRule ^([a-z0-9]+)$ product.php?id=$1
RewriteRule ^category/([a-z0-9]+)$ category.php?id=$1