我正在尝试重写链接
domain.com/user/upload/12345.jpg
至domain.com/12345.jpg
,但仅限于文件扩展名为jpg
,gif
或png
的情况。
我想,它应该是这样的:
RewriteRule ^user/upload/$ /$1 [L, QSA]
但我的版本不起作用。我该如何解决?
答案 0 :(得分:1)
我假设您的真实路径是用户/上传,并且您希望它像在根目录中一样(对我来说很有意义)。否则,只需改变路径。
我认为这样做会有所帮助。
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等一些框架,你可能需要尝试捕捉阅读。
答案 1 :(得分:1)
你可以试试这个:
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
子目录的存在。