【问题标题】:htaccess 301 redirect Find and Replacehtaccess 301 重定向查找和替换
【发布时间】:2012-01-27 15:51:45
【问题描述】:
我有一个涉及印度各个城市的网站。代码从外部来源建立链接,可能将城市命名为加尔各答、加尔各答、加尔各答等。
我需要一个 htaccess 301 重定向规则,考虑到所有拼写错误将重定向以下已知的正确拼写(加尔各答):
Calcutta-to-Delhi.html 到 Kolkata-to-Delhi.html
还有
Calcuta-Airport.html 到 Kolkata-Airport.html
谢谢。
【问题讨论】:
标签:
.htaccess
mod-rewrite
redirect
【解决方案1】:
你的要求并不简单,需要你有一台功能强大的电脑,但结果简直太棒了。
以下是我的建议:
- 您必须测试您的表达式是否匹配 URL
/,即http://mysite.com/(expr1)-to-(expr2)/
- 如果是且没有文件,请重定向到处理所有内容的 Php 文件。
- 在这个 Php 文件中,分析 URL(再一次):如果你的表达式匹配
/(expr1)-to-(expr2)/ 然后用 MySQL 搜索 SOUNDEX(在你的 Php 文件中)。请参阅查询示例here。
- 然后,在这种“特殊”404 案例中,像 google 一样提出建议,即:“您的意思是
Kolkata-to-Delhi.html?如果是,请点击链接”。
这是一项艰巨的工作,但它既有趣又显示了您的技能。很少有网站这样做(实际上我只知道 google)。
【解决方案2】:
也许你可以试试这样的:
# REDIRECTS FROM (eg): http://www.calcutta.com.au/ to http://www.kolkata.com.au/
RewriteCond %{HTTP_HOST} ^calcutta\.com\.au$ [nocase, ornext]
RewriteCond %{HTTP_HOST} ^www\.calcutta\.com\.au$ [nocase]
RewriteRule ^(.*)$ http://www.kolkata.com.au/ [nocase,L,R=301,O]
注意忽略大小写的“[nocase]”。这只会从“calcutta”重定向到“kolkata”,而不是从“calcuta”或“Kolkata”重定向(注意calcuta中缺少't'和Kolkata中的大写'K')。
您需要按照与上述相同的代码模式再添加两条规则。