Как сделать 301 редирект с index.php?page=name на name.htm ?

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by guro »

Я не сразу понял чего вы конкретно хотите.
Завтра вам напишу условие.
artifakt
Forum Members
Forum Members
Posts: 14
Joined: Tue Jul 28, 2009 10:20 am

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by artifakt »

Спасибо, буду ждать...
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by guro »

После

Code: Select all

RewriteBase /
Вставьте

Code: Select all

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteCond %{QUERY_STRING} ^page=(.*)$
RewriteRule ^.*$ %1/? [R=301,L]
artifakt
Forum Members
Forum Members
Posts: 14
Joined: Tue Jul 28, 2009 10:20 am

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by artifakt »

Работает, спасибо за помощь!
User avatar
sbupravi
Power Poster
Power Poster
Posts: 257
Joined: Sun Oct 07, 2012 9:29 pm
Location: Adler

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by sbupravi »

guro wrote:Что бы редирект не дописывал ?page= в конце строки можете использовать следующий вариант:
...
Что-то я совсем не понял (((
Можете какой-то пример привести? Делаю как описано, у меня то остаются page=, то бесконечно длинные url, нерабочие...

Допустим у меня штатный .htaccess:

Code: Select all

# Attempt to override some php settings, these settings may be helpful on some hosts if your
# default configuration does not meet CMS's minimum requirements, and your host
# has given your account appropriate permissions
#php_value upload_max_filesize "10M"
#php_value session_save_path "tmp/cache"

#php_flag magic_quotes_gpc Off
#php_flag register_globals Off
#php_flag session.use_trans_sid Off

# This is important, so uncomment if your host permit
#Options -Indexes
#ServerSignature Off
#php_value session.cookie_httponly true

#Options +FollowSymLinks

# To prevent E_STRICT problems with PHP 5.3+ you can uncomment the following lines
# Note: These settings should only be enabled for production sites!
#php_flag display_startup_errors 0
#php_flag display_errors 0
#php_flag html_errors 0
#php_value docref_root 0
#php_value docref_ext 0

<IfModule mod_rewrite.c>
RewriteEngine on
#
#Sub-dir e.g: /cmsms
RewriteBase /

# 301 Redirect all requests that don't contain a dot or trailing slash to
# include a trailing slash
# but ignore POST requests.
#RewriteCond %{REQUEST_URI} !/$
#RewriteCond %{REQUEST_URI} !\.
#RewriteCond %{REQUEST_METHOD} !POST$
#RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]

# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

<IfModule mod_headers.c>
# Disable ETags
Header unset ETag
FileEtag None
# For Security
Header set X-Frame-Options "SAMEORIGIN"
</IfModule>

<IfModule mod_deflate.c>
# Compress css, plaintext, xml, gif, and images in transport.
AddOutputFilterByType DEFLATE text/css text/plain text/xml image/gif image/jpeg image/png
</IfModule>

<IfModule mod_expires.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
# Set expires tags on various files... so that the browser wont attempt to reload them.
ExpiresActive On
ExpiresDefault "access plus 1 year"
<IfModule mod_headers.c>
  # Setting cache control to public allows proxy servers to cache the items too.
  Header set Cache-Control "public"
</IfModule>
</FilesMatch>
</IfModule>
И нужно сделать редирект 301 со старой несуществующей страницы:
http://www.englishmax.ru/info
на новую:
/metodika/
Что прописать?
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by guro »

Code: Select all

RewriteRule ^info$ http://www.englishmax.ru/metodika/ [R=301,L]
User avatar
sbupravi
Power Poster
Power Poster
Posts: 257
Joined: Sun Oct 07, 2012 9:29 pm
Location: Adler

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by sbupravi »

guro wrote:

Code: Select all

RewriteRule ^info$ http://www.englishmax.ru/metodika/ [R=301,L]
Вставил это после строк:

Code: Select all

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>
Как проверить работоспособность?
Если перейти по старой ссылке: http://englishmax.ru/info - даст 404
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by guro »

Все редиректы должны вставляться до

Code: Select all

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
User avatar
sbupravi
Power Poster
Power Poster
Posts: 257
Joined: Sun Oct 07, 2012 9:29 pm
Location: Adler

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by sbupravi »

Гут - спасибо!
User avatar
sbupravi
Power Poster
Power Poster
Posts: 257
Joined: Sun Oct 07, 2012 9:29 pm
Location: Adler

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by sbupravi »

Неясно, как прописать редирект с домена без WWW на домен с WWW.
Если прописываю так: RewriteRule ^(.*)$ http://example.ru/$1 [R=301,L] , то сайт не открывается.
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by guro »

Зачем вам домен с WWW? Никакой смысловой нагрузки WWW не несет. Делайте редирект с WWW на без WWW

Code: Select all

RewriteCond %{HTTP_HOST} ^www\.(.+)$  [NC]
RewriteRule ^(.*) http://%1/$1 [L,R=301] 
User avatar
sbupravi
Power Poster
Power Poster
Posts: 257
Joined: Sun Oct 07, 2012 9:29 pm
Location: Adler

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by sbupravi »

guro wrote:Зачем вам домен с WWW? Никакой смысловой нагрузки WWW не несет. Делайте редирект с WWW на без WWW
Внешние ссылки идут на домен с WWW, поэтому по идее вес больше на WWW дается, и надо чтобы Яндекс понял, что сайт без WWW - и сайт с WWW - это один сайт.
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by guro »

К сожалению (а может и к счастью ;D ) наш сеошник в отпуске, поэтому мой ответ не сильно компетентен. Но, как я понимаю, яндекс после пары обновлений (после получения 301 редиректов) заменит свои ссылки с www на без www и страницы не упадут в рейтинге. Если у вас есть кампания в yandex, то, в ней соответственно следует поменять ссылки на без www.
MarineKosha
New Member
New Member
Posts: 7
Joined: Tue Oct 22, 2013 7:31 pm

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by MarineKosha »

Пожалуйста, подскажите, как сделать редирект с:
;http://www.mysite.ru/
;http://mysite.ru/index.php
;http://mysite.ru/#featured
;http://mysite/#descrp
;http://mysite.ru/#more-blurb
;http://mysite.ru/#blurb

на ;http://mysite.ru/
Я совсем отчаялась, прочитала тонны форумов, перепробовала все варианты — ничего не выходит.
Заподозрила даже хостера, может, модуль какой не подключен. Мне ответили сначала:
Пример редиректа для mysite.ru

RewriteEngine On
RewriteBase /

RewriteCond %{http_host} ^domain.com [nc]
RewriteRule ^(.*)$ http://www.domain.com/$1 [r=301,nc]
А когда и так не получилось , сказали, что настройка редиректов не входит в их зону ответственности ("необходимый модуль для выполнения данной задачи Вам доступен. Для решения Вашей задачи, Вам необходимо обратиться к разработчику сайта.") . А разработчик сам не знает. На вас вся надежда! Вот наш htaccess:
# Attempt to override some php settings, these settings may be helpful on some hosts if your
# default configuration does not meet CMS's minimum requirements, and your host
# has given your account appropriate permissions
#php_value upload_max_filesize "10M"
#php_value session_save_path "tmp/cache"

#php_flag magic_quotes_gpc Off
#php_flag register_globals Off
#php_flag session.use_trans_sid Off

# This is important, so uncomment if your host permit
#Options -Indexes
#ServerSignature Off
#php_value session.cookie_httponly true

#Options +FollowSymLinks

# To prevent E_STRICT problems with PHP 5.3+ you can uncomment the following lines
# Note: These settings should only be enabled for production sites!
#php_flag display_startup_errors 0
#php_flag display_errors 0
#php_flag html_errors 0
#php_value docref_root 0
#php_value docref_ext 0

<IfModule mod_rewrite.c>
RewriteEngine on
#
#Sub-dir e.g: /cmsms
RewriteBase /

# 301 Redirect all requests that don't contain a dot or trailing slash to
# include a trailing slash
# but ignore POST requests.
#RewriteCond %{REQUEST_URI} !/$
#RewriteCond %{REQUEST_URI} !\.
#RewriteCond %{REQUEST_METHOD} !POST$
#RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]

# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
#
RewriteCond %{HTTP_HOST} ^www.mysite\.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^http://mysite.ru/#featured$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^http://mysite.ru/#descrp$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^http://mysite.ru/#more-blurb$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^http://mysite.ru/#blurb$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
RewriteCond %{REQUEST_URL} ^index\.php$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/? [R=301,L]
RewriteRule ^index\.php$ http://mysite.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

<IfModule mod_headers.c>
# Disable ETags
Header unset ETag
FileEtag None
# For Security
Header set X-Frame-Options "SAMEORIGIN"
</IfModule>

<IfModule mod_deflate.c>
# Compress css, plaintext, xml, gif, and images in transport.
AddOutputFilterByType DEFLATE text/css text/plain text/xml image/gif image/jpeg image/png
</IfModule>

<IfModule mod_expires.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
# Set expires tags on various files... so that the browser wont attempt to reload them.
ExpiresActive On
ExpiresDefault "access plus 1 year"
<IfModule mod_headers.c>
# Setting cache control to public allows proxy servers to cache the items too.
Header set Cache-Control "public"
</IfModule>
</FilesMatch>
</IfModule>
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как сделать 301 редирект с index.php?page=name на name.h

Post by guro »

Первые два редиректа у вас работают (с www на без www, с index.php на /).

При помощи htaccess вы никогда не сможете избавиться от якорей (#....). Якоря не передаются на сервер и, соответственно, не могут быть обработаны ни htaccess, ни серверным языком (php, asp, perl...).
Т.е. у вас при обращении на адрес http://mysite.ru/#featured фактически идет обращение к адресу http://mysite.ru/, а браузер уже в свою очередь, в случае наличия в тексте якоря '<a href="#featured"></a>', осуществит переход к этому месту.

PS
Для якорей нельзя сделать 301 редирект.
Locked

Return to “Russian - русский”