【问题标题】:.htaccess replace "/" with "_".htaccess 将“/”替换为“_”
【发布时间】:2014-04-12 02:31:08
【问题描述】:

这是我当前的 htaccess

<IfModule mod_rewrite.c>
    # turn on rewrite engine
    RewriteEngine on

    # if request is a directory, make sure it ends with a slash
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.*/[^/]+)$ $1/

    # if not rewritten before, AND requested file is wikka.php
    # turn request into a query for a default (unspecified) page
    RewriteCond %{QUERY_STRING} !wakka=
    RewriteCond %{REQUEST_FILENAME} wikka.php
    RewriteRule ^(.*)$ wikka.php?wakka= [QSA,L]

    # if not rewritten before, AND requested file is a page name
    # turn request into a query for that page name for wikka.php
    RewriteRule ^(.*)$ wikka.php?wakka=$1 [QSA,L]

</IfModule>

我当前的url结构是

www.domain.com/site/pool/Page_Example_Test
www.domain.com/site/pool/Page_Example_Test/edit
www.domain.com/site/pool/Page_Example_Test/edit?id=1
www.domain.com/site/pool/Page_Example_Test/history
www.domain.com/site/pool/Page_Number_Room
www.domain.com/site/pool/Page_Number_Room/edit

如何才能像这样访问它们

www.domain.com/site/pool/Page/Example/Test
www.domain.com/site/pool/Page/Example/Test/edit
www.domain.com/site/pool/Page/Example/Test/edit?id=1
www.domain.com/site/pool/Page/Example/Test/history
www.domain.com/site/pool/Page/Number/Room
www.domain.com/site/pool/Page/Number/Room/edit

让 htaccess 只更改那些“/”为“_” url名称只有/history和/edit完成,正常是没有/edit或/history的。

【问题讨论】:

  • 除了页面名称以外的所有内容都是小写的吗?
  • 您希望我们为您编写正则表达式吗?
  • 可以,只有页面名首字母大写。
  • 页面名称中是否总是包含三个部分?
  • 有可能吗?我已经尝试过正则表达式,但仍然没有运气,非常感谢一些指导方针。如果没有帮助,我将继续寻找解决方案,就像我这几天一直在做的那样......

标签: regex .htaccess


【解决方案1】:

如果页面名称中有1到5个,例如

Page
Page/Page
Page/Page/Page
Page/Page/Page/Page
Page/Page/Page/Page/Page

并且每个元素都以大写字母开头并且url的每个其他部分都只有小写,那么您可以通过四个替换来完成此操作(仅一件不需要替换)。例如,对于三件:

  • 查找内容:([A-Z][a-z]+)\/([A-Z][a-z]+)\/([A-Z][a-z]+)(\/)?
  • 替换为:$1_$2_$3$4

你可以试试here(虽然我不明白为什么它只替换每一行的空格,但最后一行)。

注意事项:

  • 每个部分(...)captured
  • 最后的斜线\/?optional,是潜在的“编辑”或“历史”之前的斜线。
  • 在某些正则表达式风格中,您不需要escape 斜线/,但这样做更安全:\/
  • 每个$[number] 是一个capture group reference
  • 警告!这些替换必须从最长到最短进行:五件,然后四件,然后三件,然后两件。否则,你会严重搞砸事情。

此答案中的所有链接均来自Stack Overflow Regular Expressions FAQ。请考虑将其添加为书签以供将来参考。特别是,请参阅底部的在线正则表达式测试人员列表,以便您自己尝试。

【讨论】:

    【解决方案2】:

    将此代码放入/site/pool/.htaccess:

    RewriteEngine On
    RewriteBase /site/pool/
    
    RewriteRule "^(Page)/([^/]+)/([^/]+/.*)$" /$1/$2_$3 [L]
    RewriteRule "^(Page)/([^/]+)/([^/]+)$" /$1/$2_$3 [L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2014-08-12
      • 1970-01-01
      • 2021-06-29
      相关资源
      最近更新 更多