网站的网址
我一直在尝试轻量级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
,这正是我想要的。
但是,我必须这样做,因为每个现场链接,它似乎可以有一个更好的解决方案,不涉及外部创建的URL。
有没有“更好”的方法来解决这个问题?这是PHP框架的“常见”问题吗? (看来这将是)
容易的选择是在您的页面模板<头>中使用< base href =“http://example.org/your/project/index”/ >。但这基本上就像生成完整的URL。是的,它也适用于XHTML,并且仍然在HTML5中。
你可以使用:
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]
我不知道NiceDog但其他框架我已经使用了一个内置函数,可以将路由转换为相应的URL。
例如在Symfony的,这将是这个样子:
<a href="<?php echo url_for('entries/show?entry=5') ?>">Link Text</a>
然后路由系统将反向解析成相对于您的配置设置的任何根URL这一点。
这就是我说我想解决我的问题。 – 2010-06-11 14:50:08
你也问过它是否在框架中很普遍:是的。 – 2010-06-11 14:56:19
我试过了。它没有什么不同,因为浏览器是解决URL的问题。 – 2010-06-11 14:49:06