【问题标题】:Redirect old ugly links to new ones with htaccess使用 htaccess 将旧的丑陋链接重定向到新的链接
【发布时间】:2014-08-27 19:30:11
【问题描述】:

我设法整理了 htaccess 中的链接,现在我的所有链接看起来都很好。但是,旧的“&category?item”链接仍然存在。 我想将这些重定向到新的,以避免被搜索引擎视为重复内容。

这是我目前拥有的 .htaccess 代码(并且工作正常)

ErrorDocument 404 /404.php
Options -Indexes

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /

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

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301]

    RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?category=$1
    RewriteRule ^([a-zA-Z0-9\-]+)/$ index.php?category=$1

    RewriteRule ^([a-zA-Z0-9\-]+)/([0-9]+)$ index.php?category=$1&page=$2
    RewriteRule ^([a-zA-Z0-9\-]+)/([0-9]+)/$ index.php?category=$1&page=$2

    RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)$ item.php?category=$1&name=$2
    RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/$ item.php?category=$1&name=$2

    RewriteRule ^download/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)$ download.php?category=$1&name=$2
    RewriteRule ^download/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/$ download.php?category=$1&name=$2      
</IfModule>

例如。 http://alienvalley.com/item.php?category=mockups&name=clean-browser-mockuphttp://alienvalley.com/mockups/clean-browser-mockup/ 都在工作...如何让第一个重定向到第二个?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案1】:

    首先,你的这部分代码

    RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?category=$1
    RewriteRule ^([a-zA-Z0-9\-]+)/$ index.php?category=$1
    

    还会导致重复内容。
    您必须选择不带 斜杠的方案。

    看起来你已经选择了 with,因为你有一个添加斜杠的规则(所以没关系,但你没有斜杠的规则现在没用了)。

    这是您的 htaccess 的样子

    ErrorDocument 404 /404.php
    Options -Indexes
    
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
    RewriteCond %{THE_REQUEST} \s/index\.php\?category=([^&]+)&page=([0-9]+)\s [NC]
    RewriteRule . %1/%2/? [R=301,L]
    
    RewriteCond %{THE_REQUEST} \s/index\.php\?category=([^&\s]+)\s [NC]
    RewriteRule . %1/? [R=301,L]
    
    RewriteCond %{THE_REQUEST} \s/item\.php\?category=([^&]+)&name=([^&\s]+)\s [NC]
    RewriteRule . %1/%2/? [R=301,L]
    
    RewriteCond %{THE_REQUEST} \s/download\.php\?category=([^&]+)&name=([^&\s]+)\s [NC]
    RewriteRule . download/%1/%2/? [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+[^/])$ $1/ [R=301,L]
    
    RewriteRule ^([^/]+)/$ index.php?category=$1 [L]
    RewriteRule ^([^/]+)/([0-9]+)/$ index.php?category=$1&page=$2 [L]
    RewriteRule ^([^/]+)/([^/]+)/$ item.php?category=$1&name=$2 [L]
    RewriteRule ^download/([^/]+)/([^/]+)/$ download.php?category=$1&name=$2 [L] 
    

    【讨论】:

    • 非常感谢,虽然我不懂一半的代码,因为我是一个 htaccess 菜鸟,这正是我所需要的!你太棒了!
    【解决方案2】:

    尝试将其添加到RewriteBase / 行的正下方:

    RewriteCond %{THE_REQUEST} \ /index\.php\?category=([^&\ ]+)($|\ )
    RewriteRule ^ /%1/ [L,R=301]
    
    RewriteCond %{THE_REQUEST} \ /index\.php\?category=([^&\ ]+)&(?:page|name)=([^&\ ]+)($|\ )
    RewriteRule ^ /%1/%2/ [L,R=301]
    
    RewriteCond %{THE_REQUEST} \ /download\.php\?category=([^&\ ]+)&name=([^&\ ]+)($|\ )
    RewriteRule ^ /download/%1/%2/ [L,R=301]
    

    【讨论】:

      【解决方案3】:
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^([^/]*)/([^/]*)$ /item.php?category=$1&name=$2 [QSA,L]
      

      这将重定向任何确实具有存在的文件或目录的网址

      http://alienvalley.com/default/clean-browser/ 
      

      也会重定向到

      http://alienvalley.com/item.php?category=default&name=clean-browser
      

      【讨论】:

        猜你喜欢
        • 2016-02-11
        • 2014-05-25
        • 2015-04-06
        • 1970-01-01
        • 1970-01-01
        • 2019-10-15
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        相关资源
        最近更新 更多