2012-03-19 72 views
0

重寫規則可以做到這一點嗎?重寫ucwords strtolower

我的PHP文件都第一個字符大寫和一些可能有一個連字符
像 Filename.php和文件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"; 

謝謝。

+0

爲此,您可以重寫內,但*只有*您必須將服務器配置root訪問權限 - 使用一種叫做RewriteMap指令的指令。但是如果你只有'.htaccess'訪問重寫引擎的話,你不能使用它。 – TerryE 2012-03-19 17:12:44

+0

是的,我有root權限 – user1275751 2012-03-19 21:55:09

回答

0

您可以將以下聲明添加到您的Apache或虛擬主機配置文件:

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]