【问题标题】:PHP - Fat Free Framework - Named URL Routing in Subfolder - 404PHP - Fat Free Framework - 子文件夹中的命名 URL 路由 - 404
【发布时间】:2015-02-16 13:33:04
【问题描述】:

情况

我正在尝试基于 Fat Free Framework 3.4 版在我的 web 应用中实现命名 URL 路由。

我正在处理的项目位于 /foo 子文件夹中 所以我通过 localhost/foo 访问项目

这很好用,我也可以毫无问题地访问不同的 URL 路由。

问题描述

当我访问模板中的路由时,它会呈现为<form method="POST" action="/do/stuff"> 使用前导“/”,浏览器将其解释为网络服务器的开始,因此将我带到 localhost/do/stuff 而不是 localhost/foo/do/stuff

代码

这就是我将命名路由传递给模板的方式:

<form method="POST" action="{{ 'doStuff' | alias }}">

这是我的 routes.ini 中的一个示例

POST @doStuff: /do/stuff=Views->doStuff

.htaccess

RewriteEngine On
RewriteBase /foo/
RewriteRule ^(tmp)\/|\.ini$ - [R=404]
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

apaches mod-rewrite 已启用。 我觉得我错过了一些重要的事情,但我已经尝试了两天来让它发挥作用,但没有运气。任何线索将不胜感激!

【问题讨论】:

    标签: php apache fat-free-framework


    【解决方案1】:

    alias() 函数返回一个相对于网络应用程序的 URL,而不是网络根目录。因此,您应该在其前面加上网络应用 BASE,如下所示:

    <form method="POST" action="{{ $BASE }}{{ 'doStuff' | alias }}">
    

    【讨论】:

    • 哦。解决方案很简单,但我太盲目了,看不到它。非常感谢:)!
    【解决方案2】:

    将以下代码添加到您的&lt;head&gt;

    <base href="{{ @SCHEME.'://'.@HOST.@BASE.'/' }}">
    

    它设置浏览器的默认基础并附加每个 url,即使它包含 /

    【讨论】:

    • 我已经设置了以下&lt;base href="&lt;?php echo $SCHEME.'://'.$HOST.':'.$PORT.$BASE.'/'; ?&gt;" /&gt; 但是我用你的代码替换了它,不幸的是它没有解决问题。感谢您的帮助!
    • 如果您使用的是模板引擎,您的代码将不起作用。您的代码仅适用于视图类。您是否在浏览器中检查了您的源代码? URL 在标头中的外观是否正确?
    • 你指的是哪个代码?我将我的基本属性更改为您的,现在它正在将&lt;base href="http://localhost/foo/"&gt; 输出到页面源中,这是 webapp 所在的位置。不幸的是,当访问命名路由时,我仍然被路由到网络服务器的根目录(例如 localhost/do/stuff 而不是 localhost/foo/do/stuff)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多