【发布时间】:2013-05-21 23:17:40
【问题描述】:
简要说明
我正在尝试用尽可能少的重写来控制我的网页重写的智能方法。
因此,例如,如果您有以下页面翻译:
'domain.com/test/' => 'domain.com/test.php'
'domain.com/errors/404/' => 'domain.com/errors.php?code=404'
您可以对每一页进行单独的重写...但是,我希望通过使用一个适合所有人的正则表达式来最小化这种情况。所以匹配上面的正则表达式是:
^([a-z0-9\-]+)\/?([a-z0-9\-]+)?\/?$
然后匹配项会像这样放置到 URL 中(请注意,错误页面上的 code 将替换为 request):
domain.com/$1.php?request=$2
然后你可以追加查询字符串...
显然在某些情况下您需要单独重写,但您通常可以通过使用巧妙的正则表达式和结构良好的页面来最大限度地减少这种情况。
我的问题
与上面的示例类似,我的网站中有一些页面是用这个精确的正则表达式重写的。所以下面的页面翻译成这样:
'domain.com/shipments/open/' => 'domain.com/shipments.php?request=open'
'domain.com/settings/user/' => 'domain.com/settings.php?request=user'
etc...
但是,出于我不会深入探讨的原因,我也有这样的页面:
'domain.com/shipment/edit'
注意它说的是 shipment 而不是 shipments!尽管如此,我仍然希望将其重写到 shipments 页面。所以翻译应该是这样的:
'domain.com/shipment/edit' => 'domain.com/shipments.php?request=edit'
除了指定 shipment 是 shipments 的别名的另一个重写之外,我想不出其他方法...
我不希望为此进行单独重写的原因之一是,我不只是在谈论发货,还有很多文档需要别名,因此我不想像我的 web 那样走多次重写路线。配置文件会变得非常大。
我想出了以下解决方案(但显然我对它们不满意):
- 在我的根目录中有一个名为 shipping.php 的页面,只包含 shipping.php 的内容
- 使用别名为每个页面重写...
我想不出另一种(更好的)方法来做到这一点,你们中的任何人都可以吗?
【问题讨论】:
标签: php regex .htaccess url-rewriting web-config