重写ucwords strtolower

时间:2012-03-19 09:45:52

标签: .htaccess mod-rewrite url-rewriting rewrite

是否可以制定重写规则来执行此操作?

我的php文件都有第一个字符大写,有些可能有连字符
喜欢 Filename.php和File-Name.php

首先

# Try this rewrite only if the file is not found
RewriteCond %{REQUEST_FILENAME} !-f

然后我想为像

这样的请求制定规则
mysite.com/thing
mysite.com/Thing
mysite.com/THING

重写

中的真实文件
mysite.com/Thing.php

或(带连字符)

mysite.com/another-thing
mysite.com/Another-Thing
mysite.com/ANOTHER-THING

重写

中的真实文件
mysite.com/Another-Thing.php

然后如果文件仍未找到,请放弃并重新将错误写入index.php,即

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [R=301,L]

我可以想办法在php中这样做但不确定是否可以在重写时完成。

$url = str_replace('-', ' ', $url);
$url = ucwords(strtolower($url));
$url = str_replace(' ', '-', $url) . ".php";

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将以下声明添加到apache或vhost配置文件中:

 RewriteMap lc int:tolower

然后,在同一文件或.htaccess文件中的以下规则可以使用此映射函数对字符串进行操作,例如

 RewriteRule ^                        -       [E=LC_URI:${lc:%{REQUEST_URI}}]

现在您可以在重写规则中使用%{ENV:LC_URI},或者如果您想删除前导/:

 RewriteCond   ${lc:%{REQUEST_URI}}   ^/(.*)$
 RewriteRule   ^.*                    %1      [E=LC_FILE:%1]