【问题标题】:Looking for some URL rewriting help寻找一些 URL 重写帮助
【发布时间】:2009-02-12 15:55:15
【问题描述】:

我的问题很简单,但我似乎找不到答案。我目前正在为一个网站进行一些 URL 重写,但我遇到了一个问题。目前我拥有的最基本的规则是这样的:

RewriteRule ^([a-zA-Z]+)/(([a-zA-Z]+)/?$ index.php?mod=$1&com$2

这在大多数情况下都有效,我有一些不适用的特殊情况,但是其中一个页面需要通过 URL 传递大量信息,我想自动重写它。一些例子:

website.com/asdf/jkl/id/5/page/2 应该变成website.com/index.php?mod=asdf&com=jkl&id=5&page=2

website.com/qwer/yuio/search/keyword/sort/alpha 应该变成website.com/index.php?mod=qwer&com=yuio&search=keyword&sort=alpha

这可能吗?我真的可以在这里使用一些帮助...谢谢! :)

【问题讨论】:

    标签: regex mod-rewrite url-rewriting


    【解决方案1】:

    根据您使用的语言/框架,将重写/调度放在脚本中可能比尝试在 mod_rewrite 中执行所有操作更简单。

    例如,如果您使用的是 PHP,给定 URL:

    http://www.example.com/asdf.php/jkl/id/5/page/2
    

    asf.php 中的脚本可以读取 PATH_INFO 变量,将其拆分为斜线,并将值写入 $_REQUEST 中的预期位置。

    那么您只需要一个简单的重写规则来删除“.php”。

    【讨论】:

      【解决方案2】:

      你可以使用递归规则:

      RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/?$ index.php?mod=$1&com$2 [L,QSA]
      RewriteRule ^([^/]+/[^/]+)/([^/]+)/([^/]+)/?(.*) $1/$4?$2=$3 [QSA]
      

      但是用PHP解析请求路径肯定会更容易。

      【讨论】:

      • 嗯,你的例子似乎让我的 apache 崩溃了:P 不过递归的好主意。
      • 我目前有这个:RewriteRule ^members/(.*)(/)?$ index.php?mod=search&com=showSearchResults/$1 [N] RewriteRule ^index.php?([^/ ]+)/([^/]+)/([^/]+)(/(.*))? index.php?$1&$2=$3$4 [QSA,N],虽然不起作用..? ://
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多