301 Redirect не работает должным образом - PullRequest
0 голосов
/ 14 февраля 2012

Попытка установить перенаправление 301 в .htaccess файле, и вот что я пытаюсь сделать

RewriteEngine On
RewriteCond %{HTTP_HOST} ^http://localhost/wordpress/$ [OR]
RewriteCond %{HTTP_HOST} ^localhost/wordpress/$
RewriteRule (.*)$ http://www.mysite.com/wordpress/$1 [R=301,L]

Я тестирую это на моей локальной машине, используя сервер WAMPP. Хотя, когда я нажимаю http://localhost/wordpress/меня перенаправляют на http://www.mysite.com/wordpress/, но для другого URL я не перенаправляюсь вообще. Например,

У меня есть этот URL на моей локальной машине http://localhost/wordpress/2010/11/shadows/, и это на сервере http://www.mysite.com/wordpress/2010/11/shadows/, но когда япри переходе по этому URL я не получаю перенаправление на соответствующий URL на работающем сервере, но мне показывают ту же страницу с локального компьютера.

Работает :

http://localhost/wordpress/
=> Redirected to:
http://www.mysite.com/wordpress/

Не работает

http://localhost/wordpress/2010/11/shadows/
=> Redirected to:
http://www.mysite.com/wordpress/2010/11/shadows/  

Как видно из URL, я пытаюсь сделать это в Wordpress.Вот полный .htaccess файл

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress

RewriteEngine On
RewriteCond %{HTTP_HOST} ^http://localhost/wordpress/$ [OR]
RewriteCond %{HTTP_HOST} ^localhost/wordpress/$
RewriteRule (.*)$ http://www.mysite.com/wordpress/$1 [R=301,L]

Может кто-нибудь сказать мне, что не так с записью перенаправления?Заранее спасибо

Обновление Я даже попробовал эту опцию

Options +FollowSymLinks 
RewriteEngine on
RewriteBase /wordpress/
RewriteRule ^(.*)$ http://www.mysite.com/wordpress/$1 [L,R=301]

Не сработало.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Всегда сначала вы, потом остальные (говорите о RewriteRules только , человек!: D) (и вы забыли директиву QSA).

Итак, вот «чистая» версия вашего RewriteRule:

<IfModule mod_rewrite.c>
  RewriteEngine On

  # BEGIN My Own rewrite rules
  RewriteCond %{HTTP_HOST} ^http://localhost/wordpress/$ [OR]
  RewriteCond %{HTTP_HOST} ^localhost/wordpress/$
  RewriteRule (.*) http://www.mysite.com/wordpress/$1 [QSA,R=301,L]
  # END My Own rewrite rules

  # BEGIN WordPress
  RewriteBase /wordpress/
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /wordpress/index.php [L]
  # END WordPress

</IfModule>

Если это файл .htaccess, попробуйте без /, например:

<IfModule mod_rewrite.c>
  RewriteEngine On

  # BEGIN My Own rewrite rules
  RewriteCond %{HTTP_HOST} ^http://localhost/wordpress/$ [OR]
  RewriteCond %{HTTP_HOST} ^localhost/wordpress/$
  # Without the / after wordpress:
  RewriteRule (.*) http://www.mysite.com/wordpress$1 [QSA,R=301,L]
  # END My Own rewrite rules

  # BEGIN WordPress
  RewriteBase /wordpress/
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /wordpress/index.php [L]
  # END WordPress

</IfModule>

Кстати, это первый раз за многие годы, когда приятно находить "строящуюся" страницу!


Пожалуйста, скажите мне, если это работает.

0 голосов
/ 15 февраля 2012

%{HTTP_HOST] будет содержать что-то вроде localhost или www.thecolorsofmysoul.com. Таким образом, ваши условия никогда не будут соответствовать.

RewriteCond %{HTTP_HOST} ^http://localhost/wordpress/$ [OR]
RewriteCond %{HTTP_HOST} ^localhost/wordpress/$

и перенаправление на внешний домен никогда не сработает.

Также первые два правила действуют в consort для сопоставления любого не-файла / каталога с index.php. http://localhost/wordpress/ имеет строку соответствия регулярному выражению "", поэтому произойдет сбой шаблона ".", произойдет сбой и произойдет перенаправление с вашим "обновлением". Попробуйте

Options +FollowSymLinks 
RewriteEngine on
RewriteBase /wordpress/

RewriteCond %{HTTP_HOST} =localhost
RewriteRule ^.*   http://www.thecolorsofmysoul.com/wordpress/$0 [L,R=301]

Кстати, с этой базой это должно быть в DOCROOT/.htaccess. Соответствующие правила Wordpress (которые не должны быть выше этого перенаправления):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!index\.php$)    index.php   [L]

Вам не нужно повторять основание в цели, а отрицательное прогнозное утверждение устраняет необходимость в первом правиле index.php.

...