好的,我不太了解正则表达式,所以我使用生成器来帮助我制作一个可以运行的简单 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 所说,接受您认为有用的答案是一种礼貌的行为。