Почему выдается 404 ?

vic-99
На сайте с 11.09.2006
Offline
71
924

Решил переделать страницы с нижним подчеркиванием между словами такого вида

http://www.mysite.ru/bednie_office_rabotniki.php , на страницы с дефисом

http://www.mysite.ru/bednie-office-rabotniki.php .

Выдается ошибка 404.

В чем может быть причина не могу понять, где может быть прописан запрет или чего не хватает в .htaccess ? Прошу помощи у профи.

RewriteEngine On

RewriteRule ^([0-9a-z_]+)\/$ /index.php?page=$1

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /main\.php\ HTTP/

RewriteRule ^main\.php$ http://www.mysite.ru/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm?)\ HTTP/

RewriteRule ^ http://www.mysite.ru/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..+$

RewriteCond %{REQUEST_URI} !/$

RewriteRule (.*) http://www.mysite.ru/$1/ [R=301,L]

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} ^mysite\.ru$ [NC]

RewriteRule ^(.*)$ http://www.mysite.ru/$1 [R=301,L]

ErrorDocument 404 http://www.mysite.ru/404/

php_flag register_globals off

php_flag magic_quotes_gpc off

php_flag display_errors off

siv1987
На сайте с 02.04.2009
Offline
427
#1

Ну и где вы здесь переделывайте нижнее подчеркивания? Более того, bednie_office_rabotniki.php не обрабатывается ни одним правилом чпу. Пишите нормальные адреса, и не вводите людей в заблуждения.

^([0-9a-z_\-]+)/$

vic-99
На сайте с 11.09.2006
Offline
71
#2
siv1987:

^([0-9a-z_\-]+)/$

Спасибо за подсказку, пару часов назад прописал только без слеша ^([0-9a-z_-]+)/$ тоже заработало.

Но при переадресации страниц со старых

Redirect 301 /bednie_office_rabotniki/ http://www.mysite.ru/bednie-office-rabotniki/

страница получается с таким адресом

mysite.ru/bednie-office-rabotniki/?page=bednie_office_rabotniki

а должно быть

mysite.ru/bednie-office-rabotniki/

Вопрос, что надо прописать, чтобы избавиться от лишнего в адресе?

siv1987
На сайте с 02.04.2009
Offline
427
#3

RewriteRule ^bednie_office_rabotniki/ /bednie-office-rabotniki/? [R=301,L]

vic-99
На сайте с 11.09.2006
Offline
71
#4
siv1987:
RewriteRule ^bednie_office_rabotniki/ /bednie-office-rabotniki/? [R=301,L]

Спасибо за помощь, но не до конца сработало почему-то. Хвост после правильного перенаправления все равно выводятся в виде вопросительного знака mysite.ru/bednie-office-rabotniki/?

Я прописал такую строчку

Redirect 301 /bednie_office_rabotniki/ http://www.mysite.ru/bednie-office-rabotniki/?

Все страницы на сайте с адресами такого вида mysite.ru/bednie-office-rabotniki/ задача чтобы после последнего слеша ничего не выводилось.

Что я делаю не так?

siv1987
На сайте с 02.04.2009
Offline
427
#5
vic-99:
Что я делаю не так?

Не так

vic-99:
Redirect 301 /bednie_office_rabotniki/ http://www.mysite.ru/bednie-office-rabotniki/?

Так

siv1987:
RewriteRule ^bednie_office_rabotniki/ /bednie-office-rabotniki/? [R=301,L]
vic-99
На сайте с 11.09.2006
Offline
71
#6

Теперь перекидывает на главную страницу при вводе адреса

mysite.ru/bednie_office_rabotniki/

Возможно ли написать правило если после слеша появляется знак вопроса, то что бы ни его ни того что за ним не выводилось?

RewriteEngine On

RewriteBase /

RewriteRule ^([0-9a-z_\-]+)\/$ /index.php?page=$1

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /main\.php\ HTTP/

RewriteRule ^main\.php$ http://www.mysite.ru/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm?)\ HTTP/

RewriteRule ^ http://www.mysite.ru/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..+$

RewriteCond %{REQUEST_URI} !/$

RewriteRule (.*) http://www.mysite.ru/$1/ [R=301,L]

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} ^musite\.ru$ [NC]

RewriteRule ^(.*)$ http://www.mysite.ru/$1 [R=301,L]

RewriteRule ^bednie_office_rabotniki/ /bednie-office-rabotniki/? [R=301,L]

ErrorDocument 404 http://www.mysite.ru/404/

php_flag register_globals off

php_flag magic_quotes_gpc off

php_flag display_errors off

J
На сайте с 20.02.2014
Offline
120
jkm
#7

Подвох в порядке следования правил.


RewriteRule ^([0-9a-z_\-]+)\/$ /index.php?page=$1
RewriteRule ^bednie_office_rabotniki/ /bednie-office-rabotniki/? [R=301,L]

RewriteRule получает результат предыдущих преобразований.

Редирект не срабатывает, так как первым правилом адрес bednie_office_rabotniki/ меняется на index.php?page=bednie_office_rabotniki.

Сгруппируйте в самое начало правила для редиректов, а правила для красивых урлов в самый конец.


RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /main\.php\ HTTP/
RewriteRule ^main\.php$ http://www.mysite.ru/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm?)\ HTTP/
RewriteRule ^ http://www.mysite.ru/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) http://www.mysite.ru/$1/ [R=301,L]

RewriteCond %{HTTP_HOST} ^musite\.ru$ [NC]
RewriteRule ^(.*)$ http://www.mysite.ru/$1 [R=301,L]

RewriteRule ^bednie_office_rabotniki/ /bednie-office-rabotniki/? [R=301,L]

RewriteRule ^([0-9a-z_\-]+)\/$ /index.php?page=$1
vic-99
На сайте с 11.09.2006
Offline
71
#8

jkm, Ваше уточнение сработало на ура, спасибо.

А какое решение есть для этого?

Все страницы на сайте с адресами такого вида mysite.ru/bednie-office-rabotniki/, что надо прописать, чтобы после последнего слеша ничего не выводилось?

яндекс индексирует страницы такого вида, как можно избавиться от этого?

mysite.ru/index.php/?page=guidelines

mysite.ru/index.php/?page=teaching

mysite.ru/outsourcing/?yclid=23575343

mysite.ru/control/?_openstat=ZGlyZ...

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