适用于Web应用程序的漂亮URL

时间:2011-02-28 12:39:15

标签: php mod-rewrite friendly-url

我知道有一百篇关于Mod Rewrite的文章,教程和手册,但我倾向于通过示例更好地学习,所以我要求的是一个快速的漂亮网址转换,我会在路上(所以我可以完全剖析它的作用,所以我可以把它应用到其他人身上)

我有这个网址:http://www.example.com/single.php?id=1

现在如果它可以遵循与Stack Overflow相同的约定,那么id = 1就是页面的实际标题。

如果有任何帮助,我在PHP变量中有标题吗?

如果有人可以将上述内容转换为:http://www.example.com/single/here-is-my-cool-title(最后一位是动态的,取决于PHP变量),我将不胜感激。

这可能吗?

4 个答案:

答案 0 :(得分:3)

实际上,在网址中确实有帖子ID和标题,但他们只会使用帖子ID。标题不太合适,因为可能有重复的帖子(相同的标题,不同的ID),标题更改等。对于这个问题的网址:

/questions/5142095/pretty-urls-for-web-application

解决这个问题:

/single.php?id=5142095

重写规则将是:

RewriteRule ^questions/([0-9]*)/(.*)$ /single.php?id=$1

这看起来是uri的开始(在域之后)^,单词questions,任何长度的数字`[0

这是寻找:

  • ^ URI的开头
  • 单词questions
  • 斜线/
  • 可变长度的数字[0-9]*(例如1,123,1234等)
  • 斜线/
  • 任何字符长度.*(即问题标题)
  • $ URI的结尾

当字符匹配(例如[0-9] *或。*)在括号中时,mod_rewrite将匹配结果放入编号的美元变量中。在上面的规则中,[0-9]*匹配任意数字(以及任意长度的数字)并将其放入$1。第二个匹配.*匹配任何字符的任意长度,并将匹配放入$2

您的应用程序将在规则的右侧收到URI,并将美元变量替换为匹配项。

答案 1 :(得分:1)

关于mod重写的文章数量你是正确的 - 我个人不喜欢不断添加额外的规则,然后担心该规则是否会被捕获......

为此,我更喜欢简单地将批次传递给根索引文件,然后允许服务器端决定如何处理它。

Have a look at this.

答案 2 :(得分:1)

与其他人不同,这个答案将为您提供解决方案,不是针对特定问题,而是针对整个问题。仅仅因为它是基于现实生活经验,而不是基于理论。

This answer包含您需要的所有内容,包括来自旧式网址的SEO友好重定向和用于更改旧脚本以使其像往常一样运行的代码。

您唯一要做的就是更改网站上的链接生成代码。我希望这不是什么大不了的事。

答案 3 :(得分:0)

你必须使用Apache的mod-rewrite,这是一个例子:

    <Directory /www/yoursite/>
            RewriteEngine On
            RewriteRule ^single/?(.*)?/?$ article.php?id=$1 [L]
    </Directory>

编辑:在重写中添加整数标识符是个好主意,例如:

                RewriteRule ^single/([0-9]+)/?(.*)?/?$ article.php?id=$1&text=$2 [L]