Php 这是mod_重写的工作吗?

Php 这是mod_重写的工作吗?,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我正在帮助一些人尝试清理他们网站的url,这些url是建立的,但还没有完全完成。它在VPS主机上使用基于PHP/MySQL的定制CMS。最初的开发人员已经开始陷入困境,最后一件他们没有得到的事情就是修复URL以更加友好 该场地供一家公寓管理公司使用,该公司在宾夕法尼亚州/新泽西州拥有多座公寓楼: 在该网站的页脚中有指向各个公寓详细信息页面的链接(请注意,一些公寓楼仅以所在城镇命名)。URL如下所示: 我们想让这些看起来像: (同样,第一个doylestown是因为它是城镇的名称,第二个是因为

我正在帮助一些人尝试清理他们网站的url,这些url是建立的,但还没有完全完成。它在VPS主机上使用基于PHP/MySQL的定制CMS。最初的开发人员已经开始陷入困境,最后一件他们没有得到的事情就是修复URL以更加友好

该场地供一家公寓管理公司使用,该公司在宾夕法尼亚州/新泽西州拥有多座公寓楼:

在该网站的页脚中有指向各个公寓详细信息页面的链接(请注意,一些公寓楼仅以所在城镇命名)。URL如下所示:

我们想让这些看起来像: (同样,第一个doylestown是因为它是城镇的名称,第二个是因为它是公寓楼本身的名称)

所以,正如你所看到的,几乎所有的url段都存在,但我们需要重新排列它们,并在其中隐藏一些丑陋的ID号内容

此外,您还可以从面包屑中找到一些页面,这些页面像公寓一样聚集在一起,例如:

这给了你镇上的两栋楼。我们也想把它清理干净

我想我要问的是,如果这看起来像是要用mod_重写来清理的东西,或者改变生成这些长而丑陋的URL的代码

我所看到的关于mod_rewrite的所有内容都涉及具有查询字符串的url,如example.php/user?id=100,但不会像下面这样移动url段


如果是mod_rewrite,如果任何超级好人想让我开始使用一些正则表达式,我会非常感激。然而,我知道这是在要求强制性的“你尝试了什么?”回答。我完全理解。

这看起来像两个问题:

Q1)我可以使用mod_rewrite帮助我清理这些URL吗?

Q2)如果是这样,我将如何进行此操作?

对此,我要回答:

A1)是的,mod_rewrite有帮助。但是,要重新设计URL,您还需要修改应用程序代码。尽管mod_rewrite非常适合将具有良好逻辑结构的传入HTTP请求映射/分派到现有的(尽管可能是不友好的)可访问资源/端点集,它无法帮助应用程序在HTTP响应中发出具有良好逻辑结构的URL。您必须修改在应用程序中呈现出站URL的代码,或者将您自己的“出站URL重写层”添加到应用程序中(这会在发送HTTP响应之前破坏您的HTTP响应以符合您的新方案)


A2)从正式定义当前/现有URL模式和要实现的新URL模式开始。我喜欢画画,有些人喜欢使用文本,但我的建议是在深入研究正则表达式和mod_重写的神秘细节之前,先解决一些逻辑问题。这将使您在遇到麻烦时更容易提出连贯的问题,并帮助您避免在考虑不周的计划上浪费时间(就像任何软件开发项目一样)。在线发布了大量mod_rewrite示例,模块文档维护良好。

看看我的答案:如果你隐藏了一些难看的ID号信息,那么您将永远无法使URL看起来像
http://www.yourmetropolitan.com/welcome/feature_details/doylestown/9/7/Bucks_County/Doylestown/Pennsylvania/doylestown/3
再次,隐藏=永远消失。@JonLin-对,我们不希望URL看起来像那样。如果您发布实际的重写规则,这将非常有用。在这两个链接中,我使用一个简单的重写规则,将所有内容转发到index.php。因此,匹配和构建链接取决于PHP脚本。谢谢Peter。我可能有点过头了。但这个答案至少有助于描述这个问题,并与知道他们在做什么的人制定一个计划!在开发web应用程序时使用框架的优点之一是,有人考虑了“调度”(即HTTP请求如何映射到应用程序代码)和“呈现管道”(即HTTP响应如何生成)。但当然,任何框架都有一条学习曲线,您可能会感到受到它所施加的一些约束。请注意,几乎任何语言都有很多框架(质量各异)。当购买一款时,在你的应用程序中寻找接近你目标的示例。