htaccess - кто разбирается?

[Удален]
626

заранее спасибо за совет.

проблема такая:

offline explorer сохранил без изменения ссылок сайт целиком,

сайт состоит из большого количества файлов вида "archive_date.shtml?date=19991228" и "text.shtml?200411/20041126143736.inc", которые сохранены на диске как "archive_date.shtml@date=19991228" и "text.shtml@200411_2F20041126143736.inc" соответственно (вопросики заменены на собачки, слэш заменен на _2F)..

как прописать в htaccess чтобы при обращении к www.site.ru/archive_date.shtml?date=19991228 сервер выдавал сохраненную статичную страницу archive_date.shtml@date=19991228 ?

пробовал всяко, ничего не помогает:

(1) RewriteRule ? @

(2) RewriteRule shtml? shtml@

(3) RewriteRule archive_date.shtml?date=(.*) archive_date.shtml@date=$1

(4) RewriteRule archive_date.shtml@date=(.*) archive_date.shtml?date=$1

а так же с экранированием точек и вопросов и без экранирования..

буду благодарен матерому укротителю апача в разделении моей нелегкой ноши... )

кто-то сталкивался с подобным? как вообще решается?

* внутренние ссылки сайта хочется оставить как были и не менять их на "собачковские"..

Polimer
На сайте с 01.09.2006
Offline
84
#1

ну как бы вот так должно все работать:

RewriteEngine On

RewriteCond %{THE_REQUEST} archive_date\.shtml\?date=([0-9]*)
RewriteRule .* archive_date.shtml@date=%1
RewriteCond %{THE_REQUEST} text\.shtml\?([0-9]*)/([0-9]*).inc
RewriteRule .* text.shtml@%1_2f%2.inc

дело в том, что query string не передается в RewriteRule, приходится шаманить в RewriteCond

Программные решения для бизнеса. (http://frontsoft.ru/) На заказ. Дорого.
R8
На сайте с 22.03.2009
Offline
10
#2

Вот так будет работать:

RewriteBase /

RewriteCond %{QUERY_STRING} ^date=([0-9]*)

RewriteRule ^(.*)$ archive_date.shtml@date=%1

[Удален]
#3
Polimer:
ну как бы вот так должно все работать:
RewriteEngine On

RewriteCond %{THE_REQUEST} archive_date\.shtml\?date=([0-9]*)
RewriteRule .* archive_date.shtml@date=%1
RewriteCond %{THE_REQUEST} text\.shtml\?([0-9]*)/([0-9]*).inc
RewriteRule .* text.shtml@%1_2f%2.inc


дело в том, что query string не передается в RewriteRule, приходится шаманить в RewriteCond

спасибо огромное! работает!

а не подскажете - может быть как-то можно решить такую вот еще проблему?:

theme.shtml@Theme=_25C4_25E5_25EB_25EE _25C3_25EE_25ED_25E3_25E0_25E4_25E7_25E5

русские символы так сохраняет offline explorer. ссылки все конечно с русскими символами просто..

R8
На сайте с 22.03.2009
Offline
10
#4

В чем проблема вы не сказали. Чего, куда?

Polimer
На сайте с 01.09.2006
Offline
84
#5
jozeppe:

theme.shtml@Theme=_25C4_25E5_25EB_25EE _25C3_25EE_25ED_25E3_25E0_25E4_25E7_25E5
русские символы так сохраняет offline explorer.

о блин. здесь уже сложнее. либо RewriteMap мучить, либо... рерайтить в php-скрипт, который уже будет искать этот файл на основании запроса

[Удален]
#6

а, нет, не русскими буквами, а так:

<A class=mn HREF=theme.shtml?Theme=%CA%EE%F0%F0%F3%EF%F6%E8%FF>Коррупция</A>

а файл такой: theme.shtml@Theme=_25CA_25EE_25F0_25F0_25F3_25EF_25F6_25E8_25FF

значит просто замена % на _25. разберусь.

спасибо!

R8
На сайте с 22.03.2009
Offline
10
#7

Это PHP-скриптом надо делать (через mod_rewrite - муть). Взять $_SERVER['REQUEST_URI'], и его разбирать. Ну а далее из шестнадцатеричной системы счисления встроенной функцией преобразовать в десятичную эти знаки. Ну и все.

Я, вообще, считаю, те, кто юзает старым дедовским способом преобразование ЧПУ простыми правилами mod_rewrite - динозавры. Я все делаю исключительно программными средствами PHP.

Polimer
На сайте с 01.09.2006
Offline
84
#8

В общем, коли уж задача усложнилась, то можно поменять средства ее решения.

Кароче, сносите, все что понаписали в .htaccess и пишите в него:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /decode.php [NC,L]

в той же директории создайте файл decode.php, а в нем:

<?php

//Define vars
$baseURL = './'; //Заменить на путь к файлам
$codeTable = array ( //Таблица трансформации символов
'?' => '@',
'/' => '_2F',
'%' => '_25',
);
$mimeType = 'text/html; charset=windows-1251'; //Заменить на нужную кодировку

$encodedRequest = ltrim($_SERVER['REQUEST_URI'],'/');
$decodedRequest = strtr($encodedRequest, $codeTable);

$file = $baseURL . $decodedRequest;
if (is_readable($file)) {
header("Content-Type: $mimeType");
readfile($file);
exit();
} else {
header('HTTP/1.0 404 Not Found');
die();
}

и все работает. В него же при желании можно добавить заголовки Content-Length, Last-Modified и обработку If-Modified-Since. Но это уже домашнее задание для самостоятельного выполнения.

rarog83, здесь даже рядом никакого ЧПУ нет.

[Удален]
#9

спасибо...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий