【问题标题】:Trailing slash in url and virtual hosturl 和虚拟主机中的斜杠
【发布时间】:2014-08-20 21:40:33
【问题描述】:

我在 localserver 上有一个 laravel 项目,并且希望它即使在结尾的斜杠添加到 url 时也能正常工作。使用 localhost url 访问时工作正常。 htaccess如下:

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

RewriteEngine On


RewriteBase /LaravelProject/public/


# Redirect Trailing Slashes...

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

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

试图访问像

这样的页面
http://localhost/LaravelProject/public/login 
and 
http://localhost/LaravelProject/public/login/

工作正常。

不过我也有这样定义的 VirtualHost

<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/LaravelProject/public"
    ServerName LaravelProject.dev
    ServerAlias www.LaravelProject.dev
    ErrorLog "c:/wamp/logs/apache_error.log"
    CustomLog "c:/wamp/logs/access.log" common
</VirtualHost>

通过urllaravelproject.dev,我可以访问文档根目录,可以看到“你已经到了”。但是当我尝试访问其他网址时说laravelproject.dev/login,它给了我500 Internal Server Error

如果我从.htaccess 中删除RewriteBase 并将RewriteRule 修改为

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

然后网址 laravelproject.dev/loginlaravelproject.dev/login/ 工作正常。 如果我这样做,问题仍然存在,localhost url 带有斜杠和 url http://localhost/LaravelProject/public/login/ 重定向到http://localhost/login

我希望能够同时使用 localhostvirtualhost url 带有和不带有尾随斜杠并给出相同的结果。看来,对我来说是其中之一。

【问题讨论】:

    标签: apache .htaccess url laravel virtualhost


    【解决方案1】:

    我认为您的 .htaccess 文件中不需要任何这些行。我已经在几个项目中进行了这样的设置,并且效果很好:

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
           Options -MultiViews
        </IfModule>
    
        RewriteEngine On
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

    【讨论】:

    • 按照您的方法,当我将尾部斜杠添加到 url 时,该页面有效。但是当我从该页面导航到其他链接时,由于未设置 RewriteBase,URL 只是被附加。这仅适用于 localhost 网址。即使我设置了 RewriteBase 它也不适用于像 laravelproject.dev 这样的非 localhost url。
    • 这使我得出结论,大问题来自您的虚拟主机。尝试将 *:80 替换为具体的虚拟名称 laravelproject.dev:80。它应该看起来像这样pastebin.com/agT8HrRC
    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多