2016-02-19 161 views
2

我在目录/home/user/Documents/laravel-training中有一个Laravel网站。Laravel:带有斜线的URL的别名

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

这是我000-default.conf

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

    ServerAdmin [email protected] 
    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参观。

但是,如果我的URL是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 

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


针对斯特凡诺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> 
+0

你有没有检查你的公共文件夹里的laravel的.htaccess工作? –

+0

@StefanoOrtisi我没有修改任何其他东西。我更新了我的帖子。 – yuwen41200

+0

试着在你的'RewriteEngine On'指令后移动'RewriteBase/dev'指令。 – patricus

回答

3

这不是一个错误,它重定向没有结尾的斜杠。

在你public/.htaccess你可以看到有下面几行:

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

^^^作为注释写明了将一个url重定向以斜线,如果它不是一个文件夹。如果你删除它,你会看到它不会重定向你。

+0

谢谢!对不起,我不熟悉Apache配置文件。 – yuwen41200