如何从根文件夹内的子文件夹访问网站?

时间:2019-12-11 01:53:39

标签: laravel .htaccess

我即将部署laravel项目。我上传了所有文件,并且网站运行正常,但是唯一的问题是当我尝试访问我的网站时,例如,如果我尝试在URL中写mywebsitename.com,则显示了公共目录,这是因为我已经符号链接了我的Laravel的公用文件夹到public_html文件夹。我不知道如何编辑.htaccess文件以便使用mywebsitename.com而非mywebsitename.com/public加载网站。我的htacess文件代码是

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我的文件目录结构显示在this image

请帮助我

4 个答案:

答案 0 :(得分:4)

我猜这是一个Apache服务器。如果是;

  1. 确保您的域mywebsitename.com指向public_html
  2. 在您的根目录(public_html)中添加一个.htaccess文件,并将其粘贴到
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>

答案 1 :(得分:4)

我找到了解决这个问题的方法。

1。复制public_html文件夹中的所有laravel文件,包括.htaccess文件和index.php文件(假定它们在公共文件夹中)(将两个文件都保留在公共文件夹中)。

2。然后使用SSH将存储链接到公用文件夹,为此,请打开SSH输入ID和密码,并使用“ cd domains / yourdomainname.com / public_html”更改目录 然后输入php artisan命令,即“ php artisan storage:link” (注意:-更改目录后,您可以根据需要提供所有php artisan命令,例如migration和config:cache或clear:cache。

3。现在,在给出所有必需的命令之后,如果您在URL上键入yourdomainname.com/public,但是如果您仅键入域名,则可以访问所有功能齐全的网站,包括图像显示功能,然后所有laravel文件会在浏览器上显示以避免出现这种情况,并跳转到公用文件夹内直接在公用文件夹外但在
内部创建一个.htaccess文件 复制public_html文件夹,复制下面给出的代码,然后,如果您只是将域名放在URL上,则将直接显示您的网站

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteRule ^ public [L]

答案 2 :(得分:3)

您可以将其与RewriteBase指令一起使用

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteBase /public_html/ # or '/' only depends on your vhost config

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

</IfModule>

答案 3 :(得分:0)

我对apache服务器不熟悉,但是问题应该出在默认的索引文件中。 考虑到长期考虑,我建议您使用nginx或openresty,它更易于配置。