Indexing Symlink,我是不是遗漏了什么?

Indexing Symlink,我是不是遗漏了什么?,indexing,directory,symlink,public,Indexing,Directory,Symlink,Public,我正在尝试将带有index.php文件的public文件夹符号链接到httpdocs文件夹,该文件夹也位于该文件夹中 当我尝试对公用文件夹进行符号链接时,会出现一个错误,提示我已使用公用文件夹名称。我还尝试了将index.php文件本身进行符号链接,这虽然有效,但破坏了网站的功能 下面是我在符号链接public文件夹时使用的命令 ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public /var/www/vhosts/mysite.co.uk/http

我正在尝试将带有
index.php
文件的
public
文件夹符号链接到
httpdocs
文件夹,该文件夹也位于该文件夹中

当我尝试对公用文件夹进行符号链接时,会出现一个错误,提示我已使用
公用
文件夹名称。我还尝试了将
index.php
文件本身进行符号链接,这虽然有效,但破坏了网站的功能

下面是我在符号链接
public
文件夹时使用的命令

ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public /var/www/vhosts/mysite.co.uk/httpdocs
ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public/index.php /var/www/vhosts/mysite.co.uk/httpdocs/
下面是我在对
index.php
文件进行符号链接时使用的命令

ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public/index.php /var/www/vhosts/mysite.co.uk/httpdocs

tldr:当用户访问我的站点而不必使用mysite.co.uk/public/index.php时,我想使用公用文件夹中的
index.php
作为
index.php
文件。
index.php
文件必须保留在
public
文件夹中。

如果我理解正确,您希望从
httpdocs/public
访问
index.php
,并且该文件夹已经存在(如第一个案例中的错误所示)。您可以将文件链接到该(现有)文件夹:

ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public /var/www/vhosts/mysite.co.uk/httpdocs
ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public/index.php /var/www/vhosts/mysite.co.uk/httpdocs/
请注意,您需要指定要链接的文件itlsef

解决方案(如果
../public
../httpdocs
中需要所有文件)

  • 将数据从
    /var/www/vhosts/mysite.co.uk/httpdocs/public
    移动到
    /var/www/vhosts/mysite.co.uk/httpdocs
  • 符号链接
    /var/www/vhosts/mysite.co.uk/httpdocs
    ../public
命令:
ln-s/var/www/vhosts/mysite.co.uk/httpdocs/var/www/vhosts/mysite.co.uk/httpdocs/public

缺点:

  • 无限递归,例如
    /var/www/vhosts/mysite.co.uk/httpdocs/public/public/public/public/

无法将symlink链接到现有文件/目录。如果可能,您将破坏树结构。事实上,您正在尝试将目录链接到其父目录。您的系统应如何解析被覆盖的路径

例如:

您有一个文件/a/b/c,可以执行以下操作:

ln-s/a/b/a

系统应如何解决现在无法访问的文件
/a/b/c

将数据移动到所需目录中,而不是试图破坏文件树


可以将数据装载到现有目录(在卸载之前无法访问原始数据),但这对您的情况没有帮助。

我已经设法让它工作了!我在
httpdocs
文件夹中的
public/index.php
上使用了一个软符号链接,在
httpdocs
文件夹中创建了一个
index.php
文件

ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public /var/www/vhosts/mysite.co.uk/httpdocs
ln -s /var/www/vhosts/mysite.co.uk/httpdocs/public/index.php /var/www/vhosts/mysite.co.uk/httpdocs/
然后,我将
.htaccess
文件添加到
httpdocs
文件夹中,其中包含以下内容

Options +FollowSymLinks
<IfModule mod_rewrite.c>
        RewriteEngine on

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d

        RewriteRule . index.php [L]
</IfModule>
Options+FollowSymLinks
重新启动发动机
重写cond%{REQUEST_FILENAME}!-f
重写cond%{REQUEST_FILENAME}!-d
RewriteRule.index.php[L]

感谢@Attila支持我并帮助我!

是的,我想用这个文件作为“主页”已经在公共文件夹
httpdocs/public/index.php
中。现在要访问它,我必须访问
mysite.co.uk/public/index.php
,但我只想访问
mysite.co.uk
并得到相同的结果,这个解决方案对我有效吗?如果我把源代码放在不同的地方,我会遇到同样的问题,它会对我产生影响我们在我的
httpdocs
中创建一个
/public
文件夹/symlink,它需要位于/mysite.co.uk/文件夹中。请参阅上次更新(我希望这次我做对了:)。在这两种情况下,您都需要指定文件名,第一个路径是使用:
ln-s/var/www/vhosts/mysite.co.uk/index.php…
谢谢您的回答,如果您阅读了另一个答案中的注释,我尝试了这个方法,但出现了一个错误…它可以工作,但您没有解释您在做什么。例如/home不是/var,如果您没有正确设置PHP配置(open_basedir提示),我们将无法帮助您。