【问题标题】:I need a regex to replace underscore by hyphen我需要一个正则表达式来用连字符替换下划线
【发布时间】:2015-11-25 13:37:43
【问题描述】:

我的申请有问题。我在我的项目中使用 CodeIgniter,并且禁止在类名中使用连字符(允许使用下划线)。但我想用连字符分隔 URL 中的单词。所以我需要用正则表达式重写 url,以用 htaccess 文件中的连字符替换下划线。 想法?

例如:

我有很多链接:

  • domain.tld/I_need_help

  • domain.tld/I_need_regex

我想要:

  • domain.tld/I-need-help

  • domain.tld/I-need-regex

在htaccess文件中,应该有:

RewriteRule ^(.*)_(.*)$ /$1-$2

【问题讨论】:

    标签: regex .htaccess codeigniter hyphen


    【解决方案1】:

    您可以根据需要使用路由来更改 url。

    $route['link-to_something'] = 'class_name/some_function';

    编辑后: 试试这个:

    RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
    RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
    

    【讨论】:

    • 感谢您的回答。但是我有很多链接,我必须重写每个链接。您没有所有链接的正则表达式?
    • 我不确定你是否需要正则表达式。尝试解释您的问题,包括代码或其他内容
    • 一种硬编码方式应该类似于更改 base_url 函数以在返回结果之前将下划线更改为虚线。如果您将所有链接与base_url() 函数一起使用,这将起作用
    • 嗯?我不明白。我的 base_url() 是空的,但它应该包含 domain.tld。不在 domain.tld 之后。
    • 您应该使用所有链接,例如base_url('link-to/another-segment)
    【解决方案2】:

    经过长时间的搜索后确定。我有解决办法:

    转到Codeigniter Routes regex - using dashes in controller/method names

    【讨论】:

    • 删除R 标志。 (将您的链接从 _ 更改为 - 似乎是倒退的?通常最好使用连字符。)
    【解决方案3】:

    当您可以通过更改一行来实现这一点时,为什么还要使用正则表达式?

    打开 application/config/routes.php 并更改

    $route['translate_uri_dashes'] = TRUE;
    

    这就是你需要做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-07
      • 2016-09-22
      • 2017-12-13
      • 2023-03-13
      • 2017-11-26
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多