Wordpress .htaccess重定向文件扩展名和不区分大小写

时间:2011-06-16 16:12:58

标签: wordpress .htaccess redirect case-sensitive file-extension

我正在将一个网站转移到wordpress,但我想保留当前的URL结构用于搜索引擎优化目的。

当前网站使用.htm和.html文件的组合。当请求是.html时,我发现成功重定向到.htm。

例如

    RedirectMatch 301 (.*)\wp-site/mywebpage.html$ http://www.mydomain.com/wp-site/mywebpage.htm

我遇到以下问题:

当.html文件有大写和小写时。我似乎无法找到一个解决方案,将任何请求重定向到其.htm等效的

例如:My-Posts / Alpha-Page.html需要重定向到my-posts / alpha-page.htm或MY-POSTS / ALPHA-PAge.html重定向到my-posts / alpha-page.htm(或任何包含大写的“my-posts / alpha-page”。基本上所有请求都需要重定向到所有小写的.htm文件)

我知道这有点困难,因为它是一个组合1)我重定向到.htm和2)因为不区分大小写。

很少有事情需要考虑:

  1. 我知道Wordpress帖子是 不区分大小写。 Wordpress的静态 页面区分大小写。
  2. 我知道RedirectMatch不起作用 因为它与它完全匹配。
  3. 我相信我需要使用RewriteCond 和RewriteRule,但似乎无法 一步一步找到“好” 解释。另外,我没有 了解他们的变量(即: %{HTTP_HOSTS})和常规 表达惯例。
  4. 我不是Apache / .htaccess或 任何正则表达式专家 装置中。
  5. 从理论上讲,似乎应该有一种方法可以让它发挥作用。我将继续看看我是否可以在stackoverflow或其他外部资源中找到解决方案,如果我在stackoverflow找到解决方案,我会将其标记为已解决并将其删除。

    感谢任何帮助!

    由于

    更新06/17/2011:

    这是我当前的.htaccess文件

        # BEGIN WordPress
    
        <IfModule mod_rewrite.c>
    
    
        RewriteEngine On
    
    
        RewriteBase /wp-test-2011-06-13/
    
        RewriteRule ^index\.php$ - [L]
    
        RewriteCond %{REQUEST_FILENAME} !-f
    
        RewriteCond %{REQUEST_FILENAME} !-d
    
        RewriteRule . /wp-test-2011-06-13/index.php
    
    
        RedirectMatch 301 (.*)\wp-test-2011-06-13/redirect.html$ http://www.mydomain.com/wp-test-2011-06-13/redirect.htm
    
    
        RewriteRule ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301]
    
    
        </IfModule>
    
    
        # END WordPress
    

    更新06/20/2011:

    这是我当前的.htaccess文件:

        # BEGIN WordPress
        <IfModule mod_rewrite.c>
    
        Options +FollowSymlinks
        RewriteEngine On
    
        RewriteBase /wp-test-2011-06-13/
        RewriteRule ^/wp-test-2011-06-13/index\.php$ - [L]
    
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule .* /wp-test-2011-06-13/index.php 
    
        RedirectMatch 301 (.*)\wp-test-2011-06-13/redirect.html$ http://www.mydomain.com/wp-test-2011-06-13/redirect.htm
    
        RewriteRule ^ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME\.html$ /orlando-criminal-defense-attorney/defense-attorney-nejame.htm [QSA,NC,R=301]
    
        </IfModule>
    
        # END WordPress
    

    当我输入http://www.mydomain.com/wp-test-2011-06-13/ORLANDO-criminal-defense-attorney/defense-attorney-NEJAME.html(或小写等效的.html)时,我得到一个Wordpress“找不到页面”页面

1 个答案:

答案 0 :(得分:1)

1)是的,您可以在mod_rewrite的帮助下“轻松”完成此操作.. 但是这些说明需要放在配置文件中(内部{{ 1}} tag)不能在.htaccess中使用<VirtualHost>指令。

RewriteMap

2)如果您无法修改配置文件,那么您至少可以将RewriteEngine On RewriteMap upper2lower int:tolower RewriteRule ^/(.+)\.html$ /${upper2lower:$1}.htm [QSA,NC,R=301] 重定向到html

htm

.htaccess可以使用更多选项:

3)为每个这样的页面创建重写规则 - 效率很低,需要不断更新(每个新页面都有新规则) - 案例无关紧要:

RewriteRule ^(.+)\.html$ /$1.htm [QSA,NC,R=301]

4)进行两步重定向:1)将html重定向到一些特殊的php文件,该文件在执行时重定向到适当的低级URL。可行..但丑陋(加上2个重定向)。

如果你不能做#1,那么坚持使用#2并确保你在RewriteRule ^MYPAGES/some-Page.html$ /mypages/some-page.htm [QSA,NC,R=301] 中使用<link rel="canonical" href="PROPER_URL_GOES_HERE"/>

http://www.google.com/support/webmasters/bin/answer.py?answer=139394