Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 2重写不在一起工作的规则_Apache_Mod Rewrite_Url Rewriting - Fatal编程技术网

Apache 2重写不在一起工作的规则

Apache 2重写不在一起工作的规则,apache,mod-rewrite,url-rewriting,Apache,Mod Rewrite,Url Rewriting,我对我的产品详细信息页面有一个重写规则,这样就不用修改url了 /product detail.php?id=3765 而是: /blue-jeans 这是重写规则: RewriteRule ^([0-9a-zA-Z-]+)$ product-detail.php?slug=$1 [NC,L] 但是,我需要为我的区域经销商提供另一个。一旦我将其添加到我的.htaccess中,产品详细信息规则就会停止工作,因为导航到产品时会显示一个空白页面。我怎样才能让他们俩都工作 RewriteRule ^

我对我的产品详细信息页面有一个重写规则,这样就不用修改url了

/product detail.php?id=3765

而是:

/blue-jeans
这是重写规则:

RewriteRule ^([0-9a-zA-Z-]+)$ product-detail.php?slug=$1 [NC,L]
但是,我需要为我的区域经销商提供另一个。一旦我将其添加到我的.htaccess中,产品详细信息规则就会停止工作,因为导航到产品时会显示一个空白页面。我怎样才能让他们俩都工作

RewriteRule ^([0-9a-zA-Z-]+)$ dealers.php?slug=$1 [NC,L]

这是因为匹配的正则表达式是相同的,并且第一个正则表达式匹配,所以就完成了。您需要一个包装php脚本,它可以为您解决这个问题,或者在您的正则表达式中有一些其他标记来限制范围。例如,您可以说所有产品都在/产品下,所有经销商都在/经销商下,然后执行如下操作:

  RewriteRule ^/dealers/([0-9a-zA-Z-]+)$ /dealers.php?slug=$1 [NC,L]
  RewriteRule ^/products/([0-9a-zA-Z-]+)$ /products.php?slug=$1 [NC,L]

嗯,这真的没有意义,也不可能实现。只是因为您当前对这两个规则使用相同的模式。如果使用相同的模式,您如何期望发生不同的事情?系统如何知道差异?用魔法?还是直觉?您需要能够解释和实现这两种情况之间的差异。如果你不能,那么系统当然不能。我认为它们会不同,因为url不同,即:deralers.php vs product-detail.phpSure,目标可能不同。但是从重写引擎的角度考虑一下。它接收到一个请求,例如
/green
。如何确定“绿色”是经销商还是产品?那么要重写到哪个目标呢?你看,这需要某种方法来区分这两种情况。任何细节都可以使用,但你必须说出一些细节。啊,我明白了。艾哈迈德在下文提到了这一点。我只是无法通过简单地在regex前面添加/经销商/或/产品/来实现它。我发现一个“未找到”错误。当然,一切正常。我们都开始过一次,现在仍然在学习。您需要理解,重写最终是简单的字符串处理。它看到代表传入请求的字符串,并尝试将模式与之匹配。第一场比赛,第一发球。这就是全部。因此,您首先要回答的问题是:应该重写给经销商或产品的字符串有什么不同。如前所述:如果你不能,那么引擎就不能。如果使用相同的数字圈(我怀疑…),则无法区分它们。那么:你如何区分它们呢?谢谢,艾哈迈德。添加/经销商/或/产品/时会出现“未找到”错误。e、 g:example.com/products/blue-jeanswoops我的意思是说/products.php?slug=$1[NC,L]我会修正的