【发布时间】:2014-04-17 14:45:12
【问题描述】:
我最近对我的网站进行了很多重新设计,其中一项更改是 SEO URL,我正在做 Mod_Rewrite 来做到这一点。问题是我根本不完全熟悉 reg 表达式,在使用 .htaccess 文件时我也不是世界上最好的。现在,我遇到的问题是我有几个变量相同的级别和我正在使用的 RewriteRules 正在相互抵消。我确实通过将标签、名称和页面添加到重写的 url 中找到了解决方法,但这不是我想要的。我希望将网址结构化,使其为 /$lg/articles/[$tag|$name|$page]/ 再次,这样做是我想要的方式导致它们发生冲突,因为文档似乎不知道同时读取和处理三个。有关如何执行此操作的任何提示和建议?我将不胜感激。 :D
RewriteRule ^([^/]*)/articles/tag/([^/]*)$ /articles.php?lg=$1&tag=$2
RewriteRule ^([^/]*)/articles/name/([a-zA-Z]+)$ /articles.php?lg=$1&name=$2
RewriteRule ^([^/]*)/articles/page/([0-9]+)$ /articles.php?lg=$1&page=$2
我想要的是这样的 URL 结构:/language/articles/Variable Value。假设输入了一个整数,我希望 url 看起来像这样:/en/articles/1,然后它将作为分页系统的页码。或者将文章名称放入:/en/articles/random_article_name,然后该名称将用于数据库中的所有特定文章。同样的想法也适用于标签,但会提取所有带有该标签的文章。这个想法是让 URL 简短而干净。问题是,如果我这样做代码:
RewriteRule ^([^/]*)/articles/([^/]*)$ /articles.php?lg=$1&tag=$2
RewriteRule ^([^/]*)/articles/([a-zA-Z]+)$ /articles.php?lg=$1&name=$2
RewriteRule ^([^/]*)/articles//([0-9]+)$ /articles.php?lg=$1&page=$2
将只读取 $_GET 值中的一个,而不管变量名称或正则表达式如何,其余的都将被忽略。如果可能的话,我正在寻找一种像这样格式化我的网址的方法。如果不是,我理解。我只是觉得问那些更有经验的人并没有什么坏处。
【问题讨论】:
-
提供一些您想要在浏览器中使用的 URL 示例以及它们应该在内部重写的内容?
-
我刚刚在第一个答案的 cmets 中提供了这个,但我将编辑原始帖子以提供示例。
标签: php regex apache .htaccess mod-rewrite