符号链接,我错过了什么吗?

时间:2012-04-17 15:17:48

标签: indexing directory symlink public

我正在尝试将我的public文件夹中的index.php文件符号链接到公共文件夹所在的httpdocs文件夹。

当我尝试和Symlink公共文件夹时,我收到一条错误提醒我已经采用了public文件夹名称。我也尝试过Symlinking index.php文件本身但它破坏了网站的功能。

以下是我在Symlinking public文件夹时使用的命令。

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

这是我在Symlinking index.php文件时使用的命令。

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

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

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要从index.php访问httpdocs/public,并且该文件夹已经存在(如第一种情况中的错误通知)。您可以将文件链接到该(exisitng)文件夹:

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

请注意,您需要指定要链接的文件itlsef

答案 1 :(得分:1)

我设法让它发挥作用!我在public/index.php文件夹中的httpdocs上使用了一个软符号链接,以便在index.php文件夹中创建一个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>

感谢@Attila坚持和我一起帮忙!

答案 2 :(得分:-1)

解决方案(如果…/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

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

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