【问题标题】:Need help writing URL Rewrite rule Regular Expression for PHP and htaccess需要帮助为 PHP 和 htaccess 编写 URL 重写规则正则表达式
【发布时间】:2012-05-08 23:02:29
【问题描述】:

我读过很多关于如何使用重写规则和正则表达式的网站,但它们都倾向于用于特定示例,而不会分解每一个语法并实际上帮助我学习这些概念,以便我可以写出我需要的代码类型。

非常感谢任何帮助!

我有一个这样的网址http://www.mysite.com/myphp.php?x=1A&y=2B&c=some1&d=some2

我希望这样重写:http://www.mysite.com/some1/some2

这看起来很简单,但正如我所提到的,我还没有遇到一个解释这些概念的网站,我可以弄清楚如何使这项工作发挥作用。

在此特定示例中,?x= 始终相同,而 1A 则不同。这同样适用于 php 字符串的其他每个部分,但是,我假设重写规则应该处理 .php 文件和我真正感兴趣的变量之间的任意数量的字符。

再次感谢任何可以帮助解释这一点或提供有关重写规则和正则表达式的高质量资源来帮助我学习它的人。

【问题讨论】:

  • 假设重写语法你的/some1/some2 应该被转换为/myphp.php?x=1A&y=2B&c=some1&d=some2。在这种情况下,重写规则应该采用xy 变量(如果它们可能有所不同)?
  • 感谢帮助回答...我希望浏览器端读取 /some1/some2 而服务器端是 php 文件。我希望重写规则忽略 x 和 y。这有意义吗?

标签: php regex .htaccess url rewrite


【解决方案1】:

这样的规则会起作用(经过测试):

RewriteRule ^([^/]+)/([^/]+) myphp.php?x=1A&y=2B&c=$1&d=$2 [L]

这分为三个部分:

  1. RewriteRule 指定这是重写规则(与条件或其他指令相反)。命令是将第 2 部分改写为第 3 部分。
  2. 这部分是一个正则表达式,只有当 URL 匹配这个正则表达式时,规则才会运行。在这种情况下,我们说 - 查找字符串的开头,然后是一堆非斜线字符,然后是一个斜线,然后是另一束非斜线字符。括号表示括号内的部分将被存储以供将来参考。
  3. 最后,这部分说以这种格式重写给定的 URL。 $1 和 $2 指的是被捕获和存储的部分(反向引用)

至于mod_rewrite的优质资源,过去我通过搜索“mod_rewrite教程”找到了一些(我认为this对于初学者来说是一个很好的)。他们大多是这样的,所以如果有什么你不明白的具体内容,请在继续之前把它排除在外。我不确定如何解释语法。

正则表达式是另一回事,同样,那里有许多资源 - 包括初学者。一旦掌握了正则表达式的基本窍门,就可以使用Python re page 作为参考。

【讨论】:

    【解决方案2】:

    类似(未测试)添加到 .htaccess 中?

    RewriteEngine on
    RewriteRule ^/([0-9a-z]+)/([0-9a-z]+)/$ /?c=$1&d=$2 [L]
    

    假设 x 和 y 不感兴趣。

    【讨论】:

    • 您绝对不希望 QUERY_STRING 出现在其中(该变量包含 ? 之后的部分)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多