.htaccess 301使用空格和引号重定向 - 仍然无法正常工作

时间:2011-12-15 15:23:34

标签: apache mod-rewrite redirect

我有一个麻烦的地方通过.htaccess进行301重定向,整个网站刚从10年前的“旧skool”Perl系统中重新启用了WordPress。

所以现在我们需要将大量旧页面重定向到新的更友好和简洁的页面。

所以我把它作为我的.htaccess:

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

# 301's from OLD site

Redirect 301 "/cgi-bin/utile_cat.pl?cat=1.AIR / GAS COMPRESSORS" "http://www.utileengineering.co.uk/products/air-gas-compressors/"

# END 301's

出于某种原因,请访问:DOMAIN.CO.UK/cgi-bin/utile_cat.pl?cat=1.AIR / GAS COMPRESSORS不会重定向到新网址。在firefox中它推送不存在的perl文件下载,在其他浏览器中我得到了WP 404页面?

我已经浏览过可能的博客文章,论坛帖子,stackoverflow帖子,他们都说同样的事情......我的问题完全不同于它的外观。

有没有人有任何想法?托管是Fasthosts。

如果您需要查看正在发生的事情,请在上面的代码段中找到该网址。

谢谢你的时间!

2 个答案:

答案 0 :(得分:2)

我的一个建议是始终使用同类工具。即如果您使用RewriteRule继续使用RewriteRule,请勿与Redirect混用。这对其他人来说更难阅读。保持同质

你想重定向?这样做:

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

    # 301's from OLD site
    RewriteCond %{QUERY_STRING} cat=1.AIR%20/%20GAS%20COMPRESSORS
    RewriteRule ^cgi-bin/utile_cat\.pl$ /products/air-gas-compressors/? [R=301,L]

</IfModule>

不是那么好,更短和更好维护?

现在有两个提示:

请尝试使用RewriteLog指令:它可以帮助您找出此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

我可以请你在你的问题中添加重写吗?

答案 1 :(得分:0)

我认为您的网址必须经过编码才能正常运行(请注意%20而不是空格):

Redirect 301 "/cgi-bin/utile_cat.pl?cat=1.AIR%20/%20GAS%20COMPRESSORS" "http://www.utileengineering.co.uk/products/air-gas-compressors/"

陈述的顺序也很重要。也许,您应该将301重定向移到顶部,以便在WordPress重写规则之前进行处理。

相关问题