.htaccess 将“/”替换为“_”

Posted

技术标签:

【中文标题】.htaccess 将“/”替换为“_”【英文标题】:.htaccess replace "/" with "_" 【发布时间】: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的。

【问题讨论】:

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

【讨论】:

以上是关于.htaccess 将“/”替换为“_”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .htaccess 密码保护 WordPress 博客

在 .htaccess 中为 WordPress 安全添加安全标头

如何仅使用 .htaccess 文件设置 ssl

301 重定向.htaccess

HTML5 样板文件 .htaccess 与 httpd.conf

htaccess 文件不适用于特殊字符