Php htaccess有问题(每页显示一个参数)

Php htaccess有问题(每页显示一个参数),php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我在重写页面上的url时遇到问题。我只是一个ApacheNoob,所以这可能是一个愚蠢的问题,但这就是问题所在。 这是apache: 重写规则^([0-9a-zA-Z]+)/?页面=$1[NC,L] 重写规则^product/([0-9]+)/?页面=product&ID=$1[NC,L] 我有一个可变页面=商店(产品、联系人等),url如下所示 www.example/shop/ 我使用GET来显示页面,但是当我键入 “www.example/product/1/”(“www.example/

我在重写页面上的url时遇到问题。我只是一个ApacheNoob,所以这可能是一个愚蠢的问题,但这就是问题所在。 这是apache:

重写规则^([0-9a-zA-Z]+)/?页面=$1[NC,L]

重写规则^product/([0-9]+)/?页面=product&ID=$1[NC,L]

我有一个可变页面=商店(产品、联系人等),url如下所示

www.example/shop/

我使用GET来显示页面,但是当我键入

“www.example/product/1/”(“www.example/?page=product&ID=1”)

我无法获取产品id。此外,如果删除第一条重写规则,我将获取产品id,但页面不起作用(显然)

我如何检查page=products中是否有secont参数


任何帮助都将不胜感激/

您需要颠倒重写规则的顺序。它们是从上到下加工的。所以你有两个选择:

重新排列规则:

RewriteEngine on
RewriteRule ^/?product/([0-9]+)/ ?page=product&ID=$1 [NC,L]
RewriteRule ^/?([0-9a-z]+)/ ?page=$1 [NC,L]
使第一条规则更加具体:

RewriteEngine on
RewriteRule ^/?([0-9a-z]+)/?$ ?page=$1 [NC,L]
RewriteRule ^/?product/([0-9]+)/? ?page=product&ID=$1 [NC,L]
我还做了一些其他小改动,以提高规则集的健壮性:

  • 在模式中使用
    ^/?
    使您的规则在动态配置文件(如您当前所做)和真正的http服务器主机配置中工作,如果可能,应始终首选该配置
  • 对尾部斜杠使用
    /?
    ,使其成为可选的
  • 显然,在模式中使用
    […a-zA-Z]
    NC
    标志是多余的


还有一个一般提示:您应该始终希望将此类规则放置在http服务器(虚拟)主机配置中,而不是使用动态配置文件(
.htaccess
样式文件)。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(阅读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这显然是一个安全噩梦),才支持将它们作为最后一个选项。

。我将在服务器中获取规则。但我仍然有一个问题。“www.example/product/1/”有效,但现在所有其他页面如“www.example/shop/”都无效。@nikolakailcaivapović那么,您使用哪种替代方案?这些“其他页面”是什么?例如,我有一个页面“www.example/shop/”(www.example/?page=shop)。因此,如果$u GET['page']=“shop”,则会显示包含产品列表的shop页面。这就是我在index.php中包含不同页面的方式。对不起,您没有回答我的问题。好的,那么作为替代方案,您的意思是什么?其他页面就是这样,所有其他页面都不是www.example.com/product/someID/。所以联系页面、产品列表、主页等等,因为我使用GET将内容包含在index.php中