Вот мой код что нужно добавить или переделать что бы в конце url ставился слеш ? Код (Text): <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^khaybulla RewriteRule (.*) http://www.khaybulla.ru/$1 [R=301,L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.khaybulla.ru/ [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^.*$ $0.php [L,QSA] RewriteCond %{THE_REQUEST} ([^\s]*)\.php(\?[^\s]*)? RewriteRule (.*) %1 [R=301,L] </IfModule>
Да конечно, сейчас у меня http://www.khaybulla.ru/registration а надо http://www.khaybulla.ru/registration/ в конце просто что бы слеш был.
второй наводящий вопрос: нужно редирект пользователя сделать к новому адресу или рерайт перед заправкой в пхп-машину?
Код (Text): RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.khaybulla.ru/$1/ [L,R=301]
Добавить или заменить - полностью зависит от логики тех правил, которые уже прописаны в аксес-файле. Или с этим тоже помощь нужна будет?
Ну как сказать... Работает корректно, просто не соответствует Вашей логике. Включите отладку рерайтера, сделайте пару запросов и потом почитайте в журнале всю логику его работы. Потом проведите рефакторинг существующих правил для достижения нужного результата.
Когда просто твой код вставляю слеш добавляется но страница не правильно отображается можешь помочь настроить под мой код ? Код (Text): <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^khaybulla RewriteRule (.*) http://www.khaybulla.ru/$1 [R=301,L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.khaybulla.ru/ [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^.*$ $0.php [L,QSA] RewriteCond %{THE_REQUEST} ([^\s]*)\.php(\?[^\s]*)? RewriteRule (.*) %1 [R=301,L] </IfModule>
Указано две склейки: khaybulla.ru и www.khaybulla.ru для того что бы перебрасывало 301 редиректом на www.khaybulla.ru И если пользователь наберет www.khaybulla.ru/index.php тоже перебрасывает 301 редиректом на www.khaybulla.ru Убран формат файла в конце url например было www.khaybulla.ru/registration.php стало www.khaybulla.ru/registration И теперь нужно что бы в конце www.khaybulla.ru/registration становился слеш автоматически вот так www.khaybulla.ru/registration/
Код (Text): # РУТИНЫ БЕЗ-ВВВ-НА-ВВВ # # проверяем отсутствие префикса WWW-точка в имени хоста RewriteCond %{HTTP_HOST} ^khaybulla\.ru$ # перенаправляем на WWW-точка-и-так-далее RewriteRule .* http://www.khaybulla.ru/$1 [R=301,L,QSA] # РУТИНЫ ОБРАЩЕНИЯ К КОРНЕВОМУ ИНДЕКС.ПХП # # проверка прямого обращения к /index.php и редикрет на корень хоста RewriteRule ^/index\.php$ http://www.khaybulla.ru/ [R=301,L,QSA] # РУТИНЫ РЕДИРЕКТА С ДОТ-ПХП НА АДРЕС БЕЗ РАСШИРЕНИЯ # # проверяем отсутствие внутреннего перенаправления # (иначе разрешение, например, /test/ в /test.php попадет сюда и уйдет в бесконечный цикл) RewriteCond %{ENV:REDIRECT_STATUS} ^$ # провеяем что полное разрешенное имя файла заканчивается на дот-пхп RewriteCond %{REQUEST_FILENAME} ^(.*)\.php$ # перенаправляем на тот же адрес, заменяя дот-пхп на слэш RewriteRule .* %1/ [R=301,L,QSA] # РУТИНЫ ОБЯЗАТЕЛЬНОГО ЗАВЕРШАЮЩЕГО СЛЭША # (для адресов не попавших под правило "редиректа с дот-пхп..." # # проверяем отсутствие внутреннего перенаправления # (иначе разрешение, например, /test/ в /test.php попадет сюда и уйдет в бесконечный цикл) RewriteCond %{ENV:REDIRECT_STATUS} ^$ # проверяем что запрошенный адрес не завершается слэшем RewriteCond %{REQUEST_URI} !^.*/$ # перенаправляем на тот же адрес, но с завершающим слэшем RewriteRule (.*) $1/ [R=301,L,QSA] # РУТИНЫ НАПРАВЛЕНИЯ ЗАПРОСОВ К СУЩЕСТВУЮЩИМ ПХП-ФАЙЛАМ # # проверяем присутствие завершающего слэша RewriteCond %{REQUEST_URI} ^(.*)/$ # проверяем существование пхп-файла, путь к которому составлен из # адреса запроса с заменой завершающего слэша на расширение пхп RewriteCond %{DOCUMENT_ROOT}/%1.php -f # направляем запрос к такому существующему файлу RewriteRule .* %1.php [L,QSA] * тестировалось на Apache/2.4.7 * не рассматривались ситуации редиректа отсутствующих файлов и каталогов куда-то еще
Сейчас у меня открывается страница так http://www.khaybulla.ru/Z:/home/khaybulla.ru/www/registration/ а должно быть так www.khaybulla.ru/registration/ И теперь на главное странице www.khaybulla.ru не отображаются стили И нет перенаправления со страницы www.khaybulla.ru/index/ должно перенаправляться на www.khaybulla.ru а сейчас когда открываю страницу index показывает так http://www.khaybulla.ru/Z:/home/khaybulla.ru/www/Z:/home/khaybulla.ru/www/index/
Хм... Как это у меня копипаст не удался... Код (Text): RewriteCond %{REQUEST_FILENAME} ^(.*)\.php$ должно быть Код (Text): RewriteCond %{REQUEST_URI} ^(.*)\.php$ В условиях задачи про этот момент не было сказано. Решается добавлением проверки существования файла/каталога в рутину добавления слэша: Код (Text): RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^(.*)/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) $1/ [R=301,L,QSA] В условиях задачи про этот момент не было сказано. Перенаправляли же с /index.php. Лечится элементарным патчем регулярного выражения: Код (Text): RewriteRule ^index(\.php|/)$ http://www.khaybulla.ru/ [R=301,L,QSA]
Ты издеваешься? Заменить одну строку на другую не можешь? Ты кстати поудалял свои старые правила? Это бесполезный мусор, который не работает. Нужно просто оставить моё произведение искусства.
Поудалял)) Просто работает не совсем корректно поэтому попросил скинуть как должно быть может я что то неправильно вставляю. Вот ща у меня так: Код (Text): RewriteEngine on RewriteCond %{HTTP_HOST} ^khaybulla\.ru$ RewriteRule .* http://www.khaybulla.ru/$1 [R=301,L,QSA] RewriteRule ^index(\.php|/)$ http://www.khaybulla.ru/ [R=301,L,QSA] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} ^(.*)\.php$ RewriteRule .* %1/ [R=301,L,QSA] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^(.*)/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) $1/ [R=301,L,QSA] RewriteCond %{REQUEST_URI} ^(.*)/$ RewriteCond %{DOCUMENT_ROOT}/%1.php -f RewriteRule .* %1.php [L,QSA] Собрал вроде как ты сказал но теперь другие проблемы: Пропали стили с тех страниц где на конце слеш / а на главное уже показывает нормально. И не перенаправляет автоматически на слеш например когда пишешь www.khaybulla.ru/registration а должно перенаправлять на www.khaybulla.ru/registration/ А остальное работает
У меня работает всё как требовалось. Я не знаю, что ты делаешь не так. Включи отладку, почитай логику рерайта. Ну и в конце концов, не забывай тестировать с отключенный браузерным кэшем.
Ну тут произведение искусства Ganzal не причём - вы стили не от корня указываете. А раз вы поставили слеш на конце, для браузера это - папка. Т.е. HTML: <!-- Правильно --> <link href="/path/to/styles/style.css" rel="stylesheet"> <!-- Не правильно --> <link href="path/to/styles/style.css" rel="stylesheet">
Спасибо -1 проблема ) Может и с этим поможешь ? когда в ввожу www.site.ru/authorization меня перебрасывает на страницу http://www.site.ru/Z:/home/site.ru/www/authorization/ а надо что бы перенаправляло на слеш например ввожу www.site.ru/authorization что бы перенаправляло на www.site.ru/authorization/
Не, тут пусть автор шедевра htaccess помогает. Я бы просто на 100% по-другому сделал, но вы уже написали так, как написали...
в исправленной версии все работает. оно и до этого работало, просто я каким-то чудом при копипасте опечатался.
Ganzal, не сомневаюсь. Скорее всего, у ТС кеша в браузере. Или ещё как-то мне перезапуск сервера помог завести исправленный htaccess.