Php URL重写正则表达式以适合所有 简要说明
我正试图想出一个聪明的方法,用尽可能少的重写来控制我的网页重写 例如,如果您有以下页面翻译:Php URL重写正则表达式以适合所有 简要说明,php,regex,.htaccess,url-rewriting,web-config,Php,Regex,.htaccess,Url Rewriting,Web Config,我正试图想出一个聪明的方法,用尽可能少的重写来控制我的网页重写 例如,如果您有以下页面翻译: 'domain.com/test/' => 'domain.com/test.php' 'domain.com/errors/404/' => 'domain.com/errors.php?code=404' 您可以对每个页面进行单独的重写。。。但是,我希望通过使用一个正则表达式来适应所有的正则表达式来尽量减少这种情况。因此,与上面匹配的正则表达式是: ^([a-z0-9
'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/shipments/open/' => 'domain.com/shipments.php?request=open'
'domain.com/settings/user/' => 'domain.com/settings.php?request=user'
etc...
然而,出于我将不深入讨论的原因,我也有这样写的页面:
'domain.com/shipment/edit'
请注意,它显示的是装运而不是装运!尽管如此,我仍然希望将其重写到发货页面。因此,翻译如下:
'domain.com/shipment/edit' => 'domain.com/shipments.php?request=edit'
除了另一种重写方式外,我想不出其他方式来指定装运是装运的别名
我不希望单独重写的原因之一是,我不仅仅是在谈论发货,还有许多文档需要别名,因此我不希望进行多次重写,因为我的web.config文件将变得非常大
我提出了以下解决方案(但显然我不满意):
我想不出另一种(更好的)方法来做这件事,你们中的任何人都可以吗?既然你们只有一个异常,为什么不添加一个异常呢 我们将使用一种“重写技术”(我刚想到这个名字lol)
在localhost上进行了测试。我感谢您的回答,但正如我在问题中所说的,这不仅仅是一个例外。。。我只是把发货作为一种选择example@BenCarey请参阅更新的答案,这次它将从末尾删除
s
。因此,如果一个单词以单数形式的s
结尾可能会有问题。@BenCarey这没关系,如果第一个匹配失败,这意味着它的结尾没有“s”,因此它将继续第二个。我希望装运是装运的别名,所以我实际上希望这是另一种方式。。。然而,除了有例外之外,似乎没有其他解决办法。我担心会是这样,但这不是世界末日。我会接受你的回答,因为它证实了我最初的怀疑。谢谢你的帮助。:-)@BenCarey lol对不起,但请再试一次,告诉我这是否是您需要的:D
'domain.com/shipment/edit' => 'domain.com/shipments.php?request=edit'
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