【问题标题】:URL Rewrite Regular Expression to suit allURL重写正则表达式以适应所有
【发布时间】: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'

除了指定 shipmentshipments 的别名的另一个重写之外,我想不出其他方法...

我不希望为此进行单独重写的原因之一是,我不只是在谈论发货,还有很多文档需要别名,因此我不想像我的 web 那样走多次重写路线。配置文件会变得非常大。

我想出了以下解决方案(但显然我对它们不满意):

  1. 在我的根目录中有一个名为 shipping.php 的页面,只包含 shipping.php 的内容
  2. 使用别名为每个页面重写...

我想不出另一种(更好的)方法来做到这一点,你们中的任何人都可以吗?

【问题讨论】:

    标签: php regex .htaccess url-rewriting web-config


    【解决方案1】:

    既然你只有 1 个异常,为什么不添加那个异常呢?

    我们将使用“重写重写技术”(我只是想出了这个名字,哈哈)

    RewriteEngine On
    
    RewriteRule ^([a-z0-9-]+[^s/])s*/?([a-z0-9-]+)?/?$ $1s/$2 [NC]
    
    RewriteRule ^([a-z0-9-]+)/?([a-z0-9-]+)?/?$ $1.php?request=$2
    

    在 localhost 和 RewriteRuleTester 上测试。

    【讨论】:

    • 感谢您的回答,但正如我在问题中所说,这不仅仅是一个例外......我只是以发货为例
    • @BenCarey 查看更新的答案,这一次它将从末尾删除s。因此,如果一个单词实际上以单数形式以 s 结尾,则可能会有问题。
    • @BenCarey 没关系,如果第一个匹配失败,这意味着它最后没有“s”,所以它会继续第二个。
    • 我希望 shipping 是 shipping 的别名,所以我实际上希望反过来......但是,除了有例外,似乎没有其他解决方案。我担心会是这样,但这不是世界末日。我会接受你的回答,因为它证实了我最初的怀疑。谢谢你的帮助。 :-)
    • @BenCarey 大声笑对不起,但再试一次,告诉我这是否是你需要的:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多