仅在主域上使用Laravel清理URL

时间:2015-04-24 18:41:26

标签: apache .htaccess laravel url-rewriting

我使用共享托管帐户(无法访问更优选的解决方案,因此我必须使用.htaccess规则。

当我实现漂亮的网址以删除公用文件夹时,我在子域名上出现HTTP 500错误。

我在.htaccess中不够精通,无法正确制定必要的重写规则。有人可以帮忙吗?我的.htaccess看起来如下:

AddType application/x-httpd-php55 .php

RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]

编辑:

我想要完成的事情:

http://example.com代替http://example.com/public/

从xsubdomain.example.com

中排除
  

当我尝试访问子域时,我确实看到了500错误。当我   检查服务器的主错误_log它告诉我我的请求是   超过10个内部重定向的限制。

     

我发现你在public_html目录中有一个.htaccess文件   这是负责任的。当我暂时重命名该文件时,我可以   访问这两个子域。

     

您似乎只需将.htaccess规则设置为   影响主目录或排除子域

Web Root .htacess

RewriteEngine On
# Don't do anything if it is blog subdomain for example.
RewriteCond %{HTTP_HOST} ^blog\. [NC]
RewriteRule ^ - [L] 

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /public/([^&\ ]+)
RewriteRule .* /%1? [R=301,L]

RewriteCond%{HTTP_HOST} ^(www。)?example.com $ [NC] RewriteRule ^(。*)/?$ public / $ 1 [L]

/ public / .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>


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

2 个答案:

答案 0 :(得分:1)

如果您只想在主域中使用,请在.htaccess中使用此功能。

 AddType application/x-httpd-php55 .php
 <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    #Don't do anything if it is blog subdomain for example.
    RewriteCond %{HTTP_HOST} ^blog\. [NC]
    RewriteRule ^ - [L] 

    RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /public/([^&\ ]+)
    RewriteRule .* /%1? [R=301,L]

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

    # Handle Front Controller...
    RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ public/index.php [L]
</IfModule>

您可以执行此操作,因此如果您在公共场所输入,则会在没有公开的情况下重定向到网址。如果这对您有用,请告诉我。

答案 1 :(得分:0)

使用.htaccess文件不是更好的方法。要从您的网址中删除公开,您应该在本地服务器中创建一个虚拟主机,文档根目录应该是这样的DocumentRoot "h:\wamp\www\your_project_name\public"

请参阅this如何在wamp中创建虚拟主机。