1

我正在尝试将链接从 to 重写 domain.com/user/upload/12345.jpgdomain.com/12345.jpg但仅当文件扩展名为jpg,gifpng. 我想,应该是这样的:

     RewriteRule ^user/upload/$ /$1 [L, QSA]

但我的版本不起作用。我该如何解决?

4

2 回答 2

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 等,您可能需要尝试捕捉读数。

于 2012-12-29T09:48:26.043 回答
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子目录的存在。

于 2012-12-29T10:19:59.280 回答