- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
1) Редирект будет только со скрипта, который носит имя ^page\.php$, даже если и другие скрипты otherscripts.php юзают одноименные параметры.
2) Правильно, фактически адрес со слешем и без это две разные страницы. И незачем по двум адресам чтобы открывалась одна и та же страница. В данном случае отдается ошибка 404, что в принципе достаточно. Хотите редирект - ставьте редирект.
siv1987, извини, а можно еще пару вопросов, а то совсем не могу сдружиться с этим делом:
1) Вот код который сейчас работает:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.ru/ [R=301,L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^article\.php$ /%1/? [R=301,L]
RewriteRule ^([^/]*)/$ /article.php?id=$1 [L]
Т.е. что касается самих статей: было site.ru/article.php?id=N, стало site.ru/N/
Плюс работает 301 редирект со старых статей на новые.
Если я хочу сделать чтобы вид стал без слэша в конце, т.е. site.ru/N и убираю вот тут слэш:
^([^/]*)/$ делаю ^([^/]*)$, а в вашей строке с редиректом /%1/? делаю /%1? то не работает...
Если честно, то 3 ваших строки совсем не понимаю, отсюда и проблема. Подскажете где убрать в правилах слэш в конце?
2) Второй вопрос более сложный. Есть страница, которая выводит список статей: site.ru/articles.php
Нужно заменить ее на site.ru/pisanina
делаю так: RewriteRule ^pisanina$ /articles.php [L]
работает....
Теперь, по вашему примеру делаю 301 редирект:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^pisanina$
RewriteRule ^articles\.php$ [R=301,L]
не работает...
Но самая большая проблема - это что список сатей большой и появляется постраничная навигация:
http://www.site.ru/articles.php?page=2
Это нужно превратить в site.ru/pisanina/page/2/ и так далее.
Делаю так:
RewriteRule ^pisanina/page/([^/]*)/$ /articles.php?page=$1 [L]
работает...
НО! как сделать теперь редирект со старых адресов типа site.ru/articles.php?page=2 на site.ru/pisanina/page/2/, т.е. если где-то стоит ссылка на старый адрес и пользователь по ней перейдет, чтобы его переадресовало на новую страницу.
Очень-очень благодарю заранее!
Если я хочу сделать чтобы вид стал без слэша в конце, т.е. site.ru/N и убираю вот тут слэш:
Зачем вам без слеша? Имхо, лучше оставьте с ним. Но по идее должно было сработать.
НО! как сделать теперь редирект со старых адресов типа site.ru/articles.php?page=2 на site.ru/pisanina/page/2/, т.е. если где-то стоит ссылка на старый адрес и пользователь по ней перейдет, чтобы его переадресовало на новую страницу.
Весь блок будет выглядеть примерно так
#редирект /article.php => /pisanina
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^articles\.php$ /pisanina? [R=301,L]
#редирект /article.php?page=1 => /pisanina/page/1/
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^page=(\d+)
RewriteRule ^articles\.php$ /pisanina/page/%1/? [R=301,L]
#реврайты
RewriteRule ^pisanina$ /articles.php [L]
RewriteRule ^pisanina/page/(\d+)/$ /articles.php?page=$1 [L]
Кстати, проверьте имя файла, а то у вас не понятно, то ли это article.php то ли articles.php
siv1987, спасибо за ответ!
Если делаю так:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^article\.php$ /%1? [R=301,L]
RewriteRule ^([^/]*)$ /article.php?id=$1 [L]
чтобы адрес сатьи без слэша, то выходит ошибка 500.
Чувствую не правильно убрать слэш здесь: /%1? [R=301,L]
Список статей - articles.php
Сама статья - article.php
С остальным сейчас попробую...
^([^/]*)$
чтобы адрес сатьи без слэша, то выходит ошибка 500.
Такие регулярные выражения лучше не юзать, потому что они ничего конкретного не обозначают, и под них многое что может попасть.
Список статей - articles.php
Сама статья - article.p
Тогда я ничего не понял, слишком много "я делаю так и не работает, я делают эдак и тоже не работает, а сделать так то не работает то, как сделать чтобы работало так". Напишите конкретные адреса которые нужно реврайтнуть и для которых нужно сделать редирект. И желательно предоставить пару примеров реальных адресов которые используются на сайте.
siv1987, вы правильно меня поняли во всем, все работает, огромное спасибо.
Единственно что хотелось бы подшаманить это:
# Редирект 301 со старого адреса статьи на новый и преобразование старого адреса статьи на новый
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^article\.php$ /%1/? [R=301,L]
RewriteRule ^(\d+)/$ /article.php?id=$1 [L]
То что приведено сверху прекрасно преобразовывает site.ru/article.php?id=2 в site.ru/2/
Как можно сделать чтобы в результате и преобразования и редиректа в итоге получалось site.ru/2 , т.е. без слэша в конце?
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^article\.php$ /%1? [R=301,L]
RewriteRule ^(\d+)$ /article.php?id=$1 [L]
должно работать
Ничего не понимаю, пробовал ведь так не один раз до этого...
РАБОТАЕТ!!!!!
siv1987, я вас очень благодарю!!!!!
Добрый день!
siv1987, новая проблема со старым.... Как сделать то же самое что вы мне показали но когда в адресе 2 переменные? Вот пример:
Сделать реврайт и редирект 301 со старого адреса на новый,
если старый адрес:
site.ru/script.php?cat=12 нужно превратить в site.ru/tovary,
а затем site.ru/script.php?cat=12&page=5 в site.ru/tovary/page/5/
По аналогии с тем что вы показали делаю:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^cat=12
RewriteRule ^script\.php$ /tovary? [R=301,L]
RewriteRule ^tovary$ /script.php?cat=12 [L]
Это работает.
А вот если добавляется переменная page, то не работает, делаю так:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^cat=12&page=(\d+)
RewriteRule ^script\.php$ /tovary/page/%1/? [R=301,L]
RewriteRule ^tovary/page/(\d+)/$ /script.php?cat=12&page=$1 [L]
Подозреваю что неправильно делаю тут: RewriteCond %{QUERY_STRING} ^cat=12&page=(\d+)
Сможете подсказать, 2 переменные как подружить?
Заранее благодарю!
RewriteCond %{QUERY_STRING} ^cat=12
заменить на
RewriteCond %{QUERY_STRING} ^cat=12$