Переписать ucwords strtolower - PullRequest
0 голосов
/ 19 марта 2012

Возможно ли сделать правило перезаписи для этого?

Все мои 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 голосов
/ 20 марта 2012

Вы можете добавить следующую декларацию в ваш конфигурационный файл 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]

и т. д.

...