【发布时间】:2013-12-10 17:34:48
【问题描述】:
我的 Symfony 2 安装在一个共享主机站点上。目录结构:
public
|-- api // subdomain api.mydomain.com
|-- app
|-- bin
|-- m // subdomain m.mydomain.com
|-- src
|-- vendor
|-- www // symfony "web" folder
| |
| +-- app.php // front controller!
文件夹www 是主文件夹,它是前端控制器所在的文件夹。它绑定到mydmain.com 或www.mydomain.com。 子域如m.mydomain.com 或api.mydomain.com 是public 之一(即m 或api)内的文件夹。
我没有 SSH 访问权限,但只有 FTP(没有 SFTP)。问题不是在m 和api 文件夹中重复www 的内容。 如果我将所有内容从 www 复制到 api(比如说)前端控制器正在工作,我就可以在 Symfony 2 中使用子域。
到目前为止我已经尝试过:
符号链接解决方案
创建指向www 文件夹的符号链接api。我使用了放在www 文件夹中的以下脚本:
<?php
var_dump(__DIR__); // /htdocs/public/www where script is executed
$target = '/htdocs/public/www';
$link = '/htdocs/public/api';
if(file_exists($link)) {
if(is_link($link)) {
echo "unlinking $link...";
var_dump(unlink($link));
echo "symlinking $link to $target...";
var_dump(symlink($target, $link));
} else {
exit("$link exists but not symbolic link\n");
}
}
echo readlink($link); // /htdocs/public/www correct!
echo exec('cd .. && ls -l');
输出:
/htdocs/public/www
unlinking /htdocs/public/api... bool(true)
symlinking /htdocs/public/api to /htdocs/public/www... bool(true)
/htdocs/public/www
drwxr-xr-x 7 nobody nobody 4096 Nov 25 18:57 www
符号链接已创建,但(这很奇怪)我无法通过 FTP 或文件管理器界面(网络)看到它的连接。前控制器不工作。符号链接在那里,如果我尝试创建一个与符号链接同名的文件夹,则会出现错误。
.htaccess 解决方案
如何将所有对 api 文件夹的请求路由到 www 文件夹(或从 api 子域到 www 子域)?这个解决方案对我来说似乎不太正确(为什么GET /users api.mydomain.com 的 301 重定向)?
【问题讨论】:
-
你能在文件夹上运行
ls -l吗(通过php的exec)?这将提供一些关于实际存在的信息! -
@xav0989 我可以在 PHP(共享主机站点)中运行
ls该命令吗? -
看看
<?php echo exec('ls -l');是否给你任何错误。这将列出您当前文件夹中的所有文件。您还应该运行getcwd();(请参阅@edwardrkerr 的回答)来确定您的实际位置。 -
如果我理解了这个问题,你需要链接
public/api->public/www?那你为什么要从www文件夹中做呢?从public文件夹中的exec('ln -s www api')怎么样(首先删除api文件夹)?
标签: php symfony hosting subdomain shared-hosting