使用.htaccess使用一个具有不同别名的目录

时间:2011-01-10 15:57:39

标签: .htaccess codeigniter

我正在重新开发一个站点(用一个基于CodeIgniter的站点替换它),这是一个可怕的重复程序代码混乱,然而,它具有良好的搜索引擎排名。因此,我需要保持完全相同的URL结构。

该公司有许多不同的报价页面,它们基本相同 - 所以我已经制作了一个可以在任何地方使用的干净版本。

报价系统现在位于名为/ get-quote的文件夹中,但由于需要旧的URL,因此该文件夹在任何地方都不可见。

我希望以下情况发生,但不知道如何:

访问/insurancequote.php的用户应该(在服务器上)加载/ get-quote /目录(后者将加载默认的CI路由)。 CI中的基本URL应为http://www.mysite.com/insurancequote.php(我能够做到这一点),因此转到第2步将导致:http://www.mysite.com/insurancequote.php/step2(将映射到/ get-quote / step2 )。

其次,访问/brokerquote.php的用户应该在地址栏中显示mysite.com/broker(重定向?),但是在服务器上访问/ get-quote / broker。

第三,用户访问许多代理商特定页面中的一个,例如, mysite.com/brokername1.php或mysite.com/broker/brokername2.php(是的,它们分散在各处! - 但我确实知道每个地方)应该显示mysite.com/broker/brokername1或mysite。 COM /经纪人/ brokername2。在服务器上,应该访问/ get-quote / broker / brokername1或/ get-quote / broker / brokername2。

我不认为我写的内容是完全清楚的,所以也许sudocode有帮助:

If '/insurancequote.php'
    Dont Redirect
    Use '/get-quote/'

If '/brokerquote.php'
    Redirect '/broker/'
    Use '/get-quote/broker/'

// Do the following (manually) for each broker
If '/brokername1.php'
    Redirect '/broker/brokername1/'
    Use '/get-quote/broker/brokername1/'

If '/brokers/bname2.php'
    Redirect '/broker/brokername2/'
    Use '/get-quote/broker/brokername2/'

If '/mybrokerpage.php'
    Redirect '/broker/mybroker/'
    Use '/get-quote/broker/mybroker/'

这可能吗?如果是这样,我将如何去做呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

你冒的风险是因为历史原因弄乱了你的新清洁代码(接下来你会说,WTF,这太乱了!)。

对我来说,正确的解决方案是在apache中处理url迁移,而不是在你的应用程序中。您不想保留的每个引用的网址都应该显示 410 - Gone 消息(例如,考虑引用的图片),每个引用页面都有一个新的匹配页面应该得到 301 - 在右页面上永久移动重定向。然后经过一段时间后检查服务器的访问日志,如果没人检查旧网址,则删除规则。

如果您知道每个旧网址和每个匹配的网址,则使用匹配的网址文件(或哈希文件,更快),并使用 rewriteMap 管理重定向301。您可以在哈希文件中包含大量文件,匹配应该很快。它应该是一个临时功能,等待机器人修复网址。