htaccess重定向url,其中查询字符串是urlencoded

时间:2013-06-06 06:15:19

标签: php .htaccess redirect urlencode

早些时候在我的网站上我没有使用php urlencode函数来编码我的url查询参数,google抓取了这些错误。 现在实施更改后,那些索引的旧网址正在提供404响应代码。我尝试通过htaccess重写将旧网址重定向到新网址,但它无法正常工作。

假设我想将/category/Science.html重定向到新网址/category/Science, Engineering & Technology.html。对于Science, Engineering & Technology,我通过urlencode函数获得'科学%252C%2BEngineering%2B%2526%2BTechnology'。

当我尝试通过此规则重写网址时:

RewriteRule ^category/Science.html$ /category/categ.php=Science%252C%2BEngineering%2B%2526%2BTechnology[R=301,L]

它不起作用。

请建议解决此问题的正确方法。

1 个答案:

答案 0 :(得分:1)

由于这样的原因,您的文件名应仅包含小写字母,数字,连字符和下划线。如果由于某种原因,你无法重命名你的文件,你可以做一些PHP技巧:

的.htaccess

ErrorDocument 404 404.php

404.php

<?php
switch($_SERVER['REQUEST_URI']){
    case "/category/Science.html":
        header('HTTP/1.1 301 Moved Permanently');
        header("Location: /category/".urlencode("Science, Engineering & Technology").".html");
        exit();
    break;
    ...
}

// Custom 404 page stuff

我建议不要这样做,因为它很草率,难以管理,而且不是预期的行为,但是如果你无法重命名这些文件,那就去吧。