2012-12-29 4 views
1

Я пытаюсь переписать ссылку из domain.com/user/upload/12345.jpg в domain.com/12345.jpg, но только тогда, когда расширение файла jpg, gif или png. Я думаю, это должно быть так:.htaccess mod_rewrite подкаталоги с условием расширения файла

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

Но моя версия не работает. Как я могу это исправить?

+0

Согласно вашему правилу, похоже, вы хотите нанести на карту это: 'domain.com/12345.jpg' на это:' domain.com/user/upload/12345.jpg', а не наоборот, как вы говорите в вопросе. Было бы разумно, поскольку более короткий и «симпатичный» URI является первым, первым. –

+0

Вы правы, я хочу нанести на карту этот 'domain.com/12345.jpg' на это:' domain.com/user/upload/12345.jpg. Может быть, я не совсем правильно объяснил это. – Paul

ответ

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

OPTION

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.

+0

С этим правилом у меня есть циклический (или циклический? - мой английский плохой, извините) переадресация. – Paul

+0

Вы имеете в виду петлю. Я не понимаю, почему. ¿Есть ли ошибка 500? –

+0

Ошибка 310 (net :: ERR_TOO_MANY_REDIRECTS): Слишком много перенаправлений. – Paul

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, после того, как это строка запроса).

EDIT:

В случае, если вы хотите сохранить перезаписи URL для удаленного перенаправляет лучше переадресовать все матчи на локальный файл, например: remoteimage.php: (.? +).

RewriteRule^(JPG | GIF | PNG) $ remoteimage.php имя_файла = $ 1 & расширение = $ 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 и т. д., возможно, вам придется попробовать поймать чтение.

+0

Я пробовал оба правила, но они вызвали ошибку 500, но с первым правилом переписывает ссылку на 'Z:/home/localhost/www/user/upload/256.jpeg' на локальном сервере. И правильный путь к файлу - Z: /home/localhost/www/photohosting/user/upload/256.jpeg – Paul

+0

Хорошо, это системные пути. Являются ли они отдельными vhosts или каталогами в одном хосте? Хорошо опубликовать эту информацию с вопросом, чтобы получить более точные ответы. – Rolice

+0

На моем локальном хосте они являются каталогами на одном хосте. На удаленном веб-сервере это субдомен, и я не знаю всей файловой структуры (я не администратор). Но две подобласти организованы так: 'subdomain1/public_html/..' и '' subdomain2/public_html/.. '. – Paul

Смежные вопросы