.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 安全添加安全标头