我正在尝试将链接从 to 重写
domain.com/user/upload/12345.jpg
,domain.com/12345.jpg
但仅当文件扩展名为jpg
,gif
或png
. 我想,应该是这样的:
RewriteRule ^user/upload/$ /$1 [L, QSA]
但我的版本不起作用。我该如何解决?
我正在尝试将链接从 to 重写
domain.com/user/upload/12345.jpg
,domain.com/12345.jpg
但仅当文件扩展名为jpg
,gif
或png
. 我想,应该是这样的:
RewriteRule ^user/upload/$ /$1 [L, QSA]
但我的版本不起作用。我该如何解决?
我假设您的真实路径是用户/上传,并且您希望它就像在根目录中一样(对我来说很有意义)。否则,只需更改路径。
我认为这可以解决问题。
RewriteRule ^([^\.]+)\.(jpg|gif|png)$ http://domain.com/user/upload/$1.$2 [NC,L]
或者,还有这个:
RewriteRule ^(.+?)\.(jpg|gif|png)$ http://domain.com/user/upload/$1.$2 [NC,L]
您没有要传递 QSA 的查询字符串(例如:?id=5&name=myname
,在 ? 之后是查询字符串)。
编辑:
如果您想保留远程重定向的重写 url,最好将所有匹配项重定向到本地文件,例如:remoteimage.php:
RewriteRule ^(.+?).(jpg|gif|png)$ remoteimage.php?filename=$1&extension=$2 [NC,L]
该文件将读取图像并将其重新发送到浏览器...
就像是:
<?php
// Remote image
$filename = $_GET['filename'];
$ext = $_GET['extension']; // Of course you will need some validations, etc.
header('Content-type: image/' . ($ext != 'jpg' ? $ext : 'jpeg'));
// This is the idea, you could use cURL, fopen, etc. and you probably need to validate response status code and received data
$image = file_get_contens("http://domain.com/user/upload/{$filename}.{$extension}");
echo $image;
?>
如果您使用一些框架,如 codeigniter、kohana 等,您可能需要尝试捕捉读数。
你可以试试这个:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /([^/]+)\.(jpg|jpeg|gif|png)$
RewriteRule .* http://domain.com/user/upload/%1.%2 [L]
将映射此:
http://domain.com/any_name.any_extension
对此:
http://domain.com/user/upload/any_name.any_extension
选项
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (/m)?/([^/]+)\.(jpg|jpeg|gif|png)$
RewriteRule .* http://domain.com/user/upload%1/%2.%3
将映射此:
http://domain.com/any_name.any_extension
或这个
http://domain.com/m/any_name.any_extension
对此:
http://domain.com/user/upload/any_name.any_extension
或这个
http://domain.com/user/upload/m/any_name.any_extension
取决于/m
子目录的存在。