我不想在Laravel 5.1的公共目录中提供内容

时间:2016-10-27 12:18:42

标签: php apache .htaccess laravel mod-rewrite

我的Larvel 5.1项目运行得非常好。让我们说它是在http://www.example.com举办的。当我转到此address时,它的工作非常精细,并且URL中没有public/是必需的。现在唯一的问题是,如果有人前往http://www.example.com/public/ explcitly,他看到主页内容没有任何CSS和JS加载,这对SEO完全不利,因为它将被视为重复的网站。我尝试过在互联网上搜索,但每个人都在回答如何从网址中删除public/,但就我而言,它已被删除。如果他明确地去那里,我只是不希望用户看到public/内的内容。有没有办法实现这个目标?我也会在这里发布我的.htaccess文件。它有很多代码,用于启用缓存,在域中添加www.。请帮我解决这个问题。我完全卡住了。 这是我的.htaccess文件内容

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    ## EXPIRES CACHING ##
    <IfModule mod_expires.c>
    AddType application/vnd.ms-fontobject .eot
    AddType application/x-font-ttf .ttf
    AddType application/x-font-opentype .otf
    AddType application/x-font-woff .woff
    AddType image/svg+xml .svg
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType text/x-javascript "access plus 1 month"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 year"
    # Add a far future Expires header for fonts
    ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
    ExpiresByType application/x-font-ttf "access plus 1 year"
    ExpiresByType application/x-font-opentype "access plus 1 year"
    ExpiresByType application/x-font-woff "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresDefault "access plus 1 week"
    </IfModule>
    ## EXPIRES CACHING ##

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

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

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

2 个答案:

答案 0 :(得分:0)

它源于我认为懒惰的设计决策,允许所有目录和文件成为入口点。 WordPress做同样的事情。你可以像这样解决它:

# Handle Front Controller...
RewriteCond $0 =public [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^/]* index.php [L]

这应该忽略仅/public/的目录检查并保持其他功能不变。

答案 1 :(得分:-1)

在root create .htaccess页面中,包含以下内容。

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

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