301重定向未按预期工作

时间:2012-02-14 15:54:48

标签: wordpress .htaccess mod-rewrite wordpress-plugin

尝试在.htaccess文件中设置301重定向,这就是我想要做的事情

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/但是对于其他网址我根本没有被重定向到。例如

我在我的本地计算机http://localhost/wordpress/2010/11/shadows/中有此URL,而这位于服务器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 :(得分:0)

%{HTTP_HOST]将包含localhostwww.thecolorsofmysoul.com之类的内容。所以你的条件永远不会匹配。

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

并且重定向到外部域永远不会触发。

同样,前两个规则在consort中将任何非文件/目录映射到index.phphttp://localhost/wordpress/的正则表达式匹配字符串为“”,因此会使“.”模式失败,并且会失败,并会重定向到您的“更新”。尝试

Options +FollowSymLinks 
RewriteEngine on
RewriteBase /wordpress/

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

BTW这个基数应该在DOCROOT/.htaccess。相应的Wordpress规则(不应高于此重定向)是

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

您不需要在目标中重复基础,并且负前瞻断言消除了对第一个index.php规则的需要。

答案 1 :(得分:0)

永远是第一个,然后是其他人(谈论RewriteRules ,男人!:D)(你忘记了QSA指令)。< / p>

所以这里是你的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>

顺便说一下,这是多年来第一次找到“正在建设中”的页面很好!


请告诉我它是否有效。