gormarket

gormarket
Рейтинг
47
Регистрация
29.12.2010


RewriteCond %{QUERY_STRING} ^prof=%C0%E4%EC%E8%ED%E8%F1%F2%F0%E0%F2%EE%F0&gorod=%EA%E8%E5%E2&submit=%CD%E0%E9%F2%E8$
RewriteRule ^sv.php$ работа-вакансии-администратор.html? [R=301,L]

Тогда попробуйте такой прием:

условие - если запрашиваемый документ это папка

правило - реврайт на индексный файл в этой папке


RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/?$ $1/index.php [L]
Grave:
RewriteRule ^folder1/ folder1/index.php [L]
Но как я понял, такая строчка просто редиректит на folder1/index.php все, что лежит внутри folder1

А Вы сделайте так, чтоб правило не затрагивало то, что лежит внутри folder1 (используйте символ конца строки в регулярке)


RewriteRule ^folder1/?$ folder1/index.php [L]
-=Den=-:

Это так и положено или сервер криво настроен?

Наверно так положено (есле не принять каких-то специальных мер).

Например в сети есть следующее:


... почти всегда на Apache ставится модуль mod_dir, который открывает файл index.php при обращении к папке, его содержащей...

и еще:


... особенность работы модуля mod_dir, при которой если происходит запрос файла, являющегося директорией, но запрос не оканчивается знаком слэш, то mod_dir осуществляет внешнюю переадресацию на тот же адрес со знаком слэша в конце.

т.е. проблема, возникшая перед Вами вызвана тем, что .htaccess (при некоторых условиях) делает внутреннюю переадресацию (добавляя в середину адреса директорию DIR, но не проверяя при этом наличия слэша в конце адреса, и не добавляя его при необходимости)

а затем (если не хватает слэша) начинает действовать mod_dir, делая внешний редирект на измененный в .htaccess адрес с добавлением слеша (и показывая пользователю что на самом деле все лежит в DIR)

-=Den=-:
получается если папок 10 штук, все прописывать?

Если всего десяток и предполагается что папки не будут активно плодиться, то не проблема и для каждой прописать свой редирект. Некоторые пишут сотни строк.

-=Den=-:

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1/ [L]

добавляет слэш, после любой папки. как такое решение?

Не очень.

У Вас реврайт, а не редирект.

Получается что по двум адресам (со слэшем и без) будет получаться одинаковое содержимое, т.е. будут дубликаты страниц.

Лучше все-таки сделать 301 редирект, и с проверкой, что папка существует в директории DIR


RewriteCond %{REQUEST_URI} (.*/)([^/.]+)($|\?)
RewriteCond %{DOCUMENT_ROOT}%1DIR/%2 -d
RewriteRule .* %1%2/ [NC,R=301,L]

Если адрес заканчивается строкой (не содержащей точек и слэшей) или после этой строки идет знак вопроса

+

Если эта строка является поддиректорией директории DIR

=

Выполняется 301 редирект на тот же адрес с добавлением слэша

Перед теми строками, что Вы привели добавьте строку редиректа на адрес со слешем:


RewriteRule ^DIR1$ /DIR1/ [NC,R=301,L]

301 редирект любых документов из корневой папки сайта site.ru в папку folder


RewriteCond %{REQUEST_URI} !/[^/]+/
RewriteRule .* http://site.ru/folder/$0 [L,R=301]
ParserYa:
Копирую ваш скрипт к себе, предварительно подключив БД - никаких отрицательных значений нет.

А у меня есть отрицательные значения.

Что не удивительно, потому что на localhost стоит PHP Version 4.4.0 и естественно параметр get_as_float не работает и функция microtime выдает строку в любом случае.

maxttor, посмотрите, что возвращает функция microtime, например здесь, и Вам все станет понятно.

Кстати там кажется есть вариант правильного измерения времени.

krotov.dima:

RewriteRule ^brands/(.*)\.php /brands/detail.php?code=$1&%{QUERY_STRING} [L]

Выдает 500 ошибку.

У Вас преобразованный URI "brands/detail.php..." подходит для этого же правила преобразований "^brands/(.*)\.php" и правило применяется к нему снова и снова, вызывая зацикливание и вывод 500 ошибки. Нужно не допускать повторного преобразования, добавив перед правилом условие, проверяющее, что преобразование еще не сделано:


RewriteCond %{REQUEST_URI} !detail\.php
RewriteRule ^brands/(.*)\.php$ /brands/detail.php?code=$1&%{QUERY_STRING} [L]
Всего: 437