我试图将大写字母文件名仅重定向到服务器上的小写文件,并保留完整的目录大小写。
我无权访问httpd.conf。
我发现这是这样的伎俩与PHP和重写规则,但在我的情况,我无法捕捉到的目录$_SERVER['HTTP_HOST']/base/
和filename
,所以我在重定向失去了他们引起的apache失败。
规则是:
RewriteEngine on
RewriteBase /
# force url to lowercase if upper case is found
RewriteCond %{REQUEST_URI} [A-Z]
# ensure it is not a file on the drive first
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (?=([^\/])*(\.htm|\.html|\.jpg))(.*) rewrite-strtolower.php?rewrite-strtolower-url=$3 [QSA,L]
RegEx(?=([^\/])*(\.htm|\.html|\.jpg))(.*)
捕获并仅将文件名传递给进行真正重定向的php脚本:
<?php
if(isset($_GET['rewrite-strtolower-url'])) {
$url = $_GET['rewrite-strtolower-url'];
unset($_GET['rewrite-strtolower-url']);
$params = http_build_query($_GET);
if(strlen($params)) {
$params = '?' . $params;
}
header('Location: http://' . $_SERVER['HTTP_HOST'] . '/base/' . strtolower($url) . $params, true, 301);
exit;
}
header("HTTP/1.0 404 Not Found");
die('Unable to convert the URL to lowercase. You must supply a URL to work upon.');
我需要测试的网址示例是:
http://test.com/base/some Folder/some Other subfolder/Some-File-Name.jpg
所需结果:
http://test.com/base/some Folder/some Other subfolder/some-file-name.jpg
有没有一种方法可以纠正一些问题,以捕获我抛出的URL部分?
不要使用确切的示例。您也可以在PHP中获得完整路径。您无需捕获URI。您可以REQUEST_URI
在PHP中使用以获取完整路径。我会做这样的事情。只需将完整的请求发送到php,然后在那里进行处理即可。
RewriteEngine on
RewriteBase /
#don't do anything if php file is directly requested.
RewriteRule ^rewrite-strtolower\.php - [L]
# force url to lowercase if upper case is found
RewriteCond %{REQUEST_URI} [A-Z]
# ensure it is not a file on the drive first
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule . /rewrite-strtolower.php [L]
// php文件
<?php
if(isset($_SERVER["REQUEST_URI"])){
$URI = $_SERVER["REQUEST_URI"];
$URI = ltrim($URI,"/");
$parts = explode("/",$URI);
$filename = array_pop($parts);
$URI = implode("/",$parts);
header('Location: http://' . $_SERVER['HTTP_HOST'] .'/'.$URI.'/'.strtolower($filename), true, 301);
exit;
}
?>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句