Zhi*_*ong 2 php apache .htaccess frameworks slim
我目前正在开发一个内部RESTful API,我正在使用我们的主域名作为环境标识符.但是,我注意到Slim根本不喜欢它有一个点在那里的路线.
我有一个使用PHP的内置web服务器运行的本地Web服务器,我调用php -S 0.0.0.0:5000它来运行它.
一旦Web服务器启动,我在索引页面上有一个简单的"hello world".一切都很好,花花公子.
然后我建立了如下路线:
$app->get('/:domain/:id', function($domain, $id)
{
echo $domain . ' ' . $id;
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我建立了有希望解决的路线0.0.0.0:5000/apple.com/juicers.我尝试过,0.0.0.0:5000/apple/juicers页面打印出苹果汁.但是0.0.0.0:5000/apple.com/juicers,我得到404 Not Found错误.
我查看了Google上的可用资源,以及Slim框架的Github问题.似乎有人遇到了类似的问题:https://github.com/codeguy/Slim/issues/359
该票证中提出的解决方案是:URL重写修复.我尝试了但无济于事.我.htaccess在项目目录的根目录下设置了一个,然后AllowOverRide All在我的Mac的httpd.conf文件中打开.
php -S 0.0.0.0:5000我没有自己运行,而是在index.php上运行命令.此时,瘦框架不是抛出Not Found错误,而是解析为我的基本路由,我设置如下:
$app->get('/', function() { echo "hello world"; });
Run Code Online (Sandbox Code Playgroud)
我的智慧结束了,任何帮助都将受到高度赞赏.非常感谢您的阅读!
Gab*_*iel 15
Slim依赖于$_SERVER['SCRIPT_NAME']哪个应该是路由文件(Apache的DirectoryIndex,以及Rewrite指向的文件.让我们说index.php下面的例子).
在PHP嵌入式服务器中,如果URI在文件部分中包含一个点,则PHP无法正确定位SCRIPT_NAME值.
您可以使用以下调整来模仿RewriteRule行为:
router.php使用PHP嵌入式服务器创建文件并通过它发送所有请求:
$_SERVER['SCRIPT_NAME'] = 'index.php';
include 'index.php';
Run Code Online (Sandbox Code Playgroud)
然后,使用以下命令启动PHP嵌入式服务器:
php -S 0.0.0.0:<port> -t <your-Http-document-root> router.php
Run Code Online (Sandbox Code Playgroud)
该router.php文件不会在您的生产环境中使用.只有PHP嵌入式服务器使用它,它应该解决你的"带点的路由"问题.
在尝试了不同的 Slim 条件和实验之后,我开始仔细研究服务器级别并确保 URL 正确传递到 Slim 路由。
原来这是 PHP 开发服务器的一个问题,它可以通过php -S命令获得。
快速谷歌搜索发现其他几个人也遇到了同样的问题,这是服务器问题,而不是 Slim 中的错误。
为了测试我的解决方案,我运行了 MAMP,并传输了我的所有文件。然后我写了 .htaccess 将所有请求重定向到 index.php。
关键时刻:
我打字,localhost:8888/campaigns/demo.com/12当我看到demo.com/12浏览器上写着一行美丽而华丽的文字时,一股喜悦涌上我的血管!(我echo对那条特定路线有一个声明)一周多的故障排除和修补终于有了结果!
?(?O?)? 阿帕奇万岁!
感谢您的帮助@adosaiguas!