mod 重写帮助

mod 重写帮助

好的,我不太了解正则表达式,所以我使用生成器来帮助我制作一个可以运行的简单 mod_rewrite。

这是我的完整网址 https://www.huttonchase.com/prodDetails.php?id_prd=683

为了测试以确保我能使用它,我使用了这个:

RewriteRule prodDetails/(.*)/$ /prodDetails.php?id_prd=$1

所以我可以使用 URL http://www.huttonchase.com/prodDetails/683/

如果你点击它,它就会起作用,但它会完全弄乱相对路径。有一些解决方法,但我想要一些不同的东西。

https://www.huttonchase.com/prod_683_stainless-steel-flask

我希望它看到“prod”会告诉它它匹配哪条规则,683 是我在数据库中查找的产品编号,并且我希望它忽略最后一部分,它只是为了 SEO 并使链接对客户有意义。

有人告诉我这应该可行,但事实并非如此:

RewriteRule ^prod_([^-]*)_([^-]*)$ /prodDetails.php?id_prd=$1 [L]

一旦我让第一个工作,我就会写一个

Categories: https://www.huttonchase.com/cat_11_drinkware

以及数据库驱动的文本页面: https://www.huttonchase.com/page_44_terms-of-service

顺便说一句,如果需要的话,我可以改变破折号和下划线的使用方式。

另外,URL 结尾用斜线结束比较好还是不用斜线结束比较好?

谢谢!

答案1

有人告诉我这应该可行,但事实并非如此:

RewriteRule ^prod_([^-]*)_([^-]*)$ /prodDetails.php?id_prd=$1 [L]

查看您提供的示例 URL:

https://www.huttonchase.com/prod_683_stainless-steel-flask

您使用的正则表达式正在寻找prod_,后跟一串不是 的字符-。这不是您想要的。您试图将 URL 拆分为_,因此您需要以下内容:

RewriteRule ^prod_([^_]*)_(.*)$ /prodDetails.php?id_prd=$1 [L]

这会将产品编号放入 中$1,并将第二个之后的任何内容_放入 中$2。如​​果您的产品 ID 始终是数字序列,您也可以这样编写:

RewriteRule ^prod_([0-9]*)_(.*)$ /prodDetails.php?id_prd=$1 [L]

您可能需要花一些时间阅读正则表达式教程等。这mod_rewrite特别涵盖:

这是一本关于该主题的合理参考书:

正如@serverninja 所说,接受您认为有用的答案是一种礼貌的行为。

相关内容