Laravel:具有尾部斜杠的URL的Apache别名

时间:2016-02-19 16:01:24

标签: apache laravel

我在目录/home/user/Documents/laravel-training中有一个Laravel网站。

我想从http://localhost/dev/访问我的网站,
所以我在/etc/apache2/sites-enabled/000-default.conf中设置了一个别名。

这是我的000-default.conf

<VirtualHost *:80>
    ServerName foo.example.net

    ServerAdmin foo@example.org
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /dev /home/user/Documents/laravel-training/public
    <Directory /home/user/Documents/laravel-training/public/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

我还在RewriteBase /dev的开头添加了/home/user/Documents/laravel-training/public/.htaccess

现在,我可以成功访问我的网站,以防网址没有以斜杠结尾。

例如,如果我添加以下路线:

Route::get('test', function() {
    return view('welcome');
});

然后我可以从http://localhost/dev/test访问它。

但如果我的网址为http://localhost/dev/test/,则服务器会错误地将我的网页重定向到http://localhost/test,并导致404 Not Found错误。

Not Found
The requested URL /test was not found on this server.

Apache/2.4.12 (Ubuntu) Server at localhost Port 80

有谁知道如何解决这个问题?

回应Stefano Ortisi的评论:
我没有更改.htaccess中的任何其他内容。我只是保留了默认设置。

RewriteBase /dev

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

    RewriteEngine On

    # 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]

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

1 个答案:

答案 0 :(得分:4)

如果没有尾部斜杠,重定向不是错误。

在您的public/.htaccess中,您可以看到以下几行:

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

^^^作为注释声明如果它不是文件夹,将重定向带有斜杠的URL。如果删除它,您将看到它不会重定向您。