【问题标题】:Site URLs using a PHP "pretty url" framework使用 PHP“漂亮 url”框架的站点 URL
【发布时间】:2010-06-11 23:13:25
【问题描述】:

我一直在试验轻量级的 NiceDog PHP 路由框架,它的路由是这样的:

R('entries/(?<id>\d+)')
  ->controller('Entries_Controller')
  ->action('show')
  ->on('GET')

现在.htaccess 文件已设置为执行此重定向,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

我的问题是当我想创建一个指向某个地方的 URL 时,似乎不可能这样做。

假设我请求了页面entries/5,并且在该页面上我想链接到另一个条目entries/6

<a href="entries/6">Next Entry</a>

这将解析为地址http://localhost/folder/to/project/entries/5/entries/6
不是我想要的。

href /entries/6 将链接到 http://localhost/entries/6
也不是我想要的。

为了解决这个问题,我创建了一个函数来处理这个问题:

function url($route) {
    return "http://localhost/folder/to/project/$route";
}

所以我现在可以写了

<a href="<?= url('entries/6') ?>">Next Entry</a>

现在链接到http://localhost/folder/to/project/entries/6,这正是我想要的。

但是,我必须为 EVERY 站点内链接执行此操作,而且似乎有更好的解决方案不涉及外部创建的 URL。

有没有“更好”的方法来解决这个问题?这是 PHP 框架的“常见”问题吗? (好像是这样)

【问题讨论】:

    标签: php frameworks url-rewriting url-routing


    【解决方案1】:

    简单的替代方法是在您的页面模板

    中使用 。但这基本上就像生成完整的 URL。是的,它也适用于 XHTML,并且仍然适用于 HTML5。

    【讨论】:

      【解决方案2】:

      我不了解 NiceDog,但我使用的其他框架有一个内置函数,可以将路由转换为相应的 URL。

      例如,在 Symfony 中,这看起来像:

      <a href="<?php echo url_for('entries/show?entry=5') ?>">Link Text</a>
      

      然后,路由系统会将其反向解析为相对于您在配置中设置的任何根的 URL。

      【讨论】:

      • 这正是我所说的我想在我的问题中解决的问题。
      【解决方案3】:

      你能用吗:

      RewriteBase /folder/to/project/
      

      在你的 htaccess 文件中制作

      RewriteEngine On
      RewriteBase /folder/to/project/
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
      

      http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

      【讨论】:

      • 我试过这个。这没有什么区别,因为浏览器是解析 URL 的东西。
      猜你喜欢
      • 2012-01-16
      • 2010-10-26
      • 1970-01-01
      • 2011-07-14
      • 2011-06-25
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多