在Laravel中重定向带有URL参数的www到非www

8
如何将URL从www.myapp.co重定向到myapp.co?如果URL具有其他参数,例如www.myapp.co/other-parameter,则将重定向到myapp.co/other-parameter,其中other-parameter可以是任何内容。抱歉这个问题可能很基础,我使用Laravel才1周。顺便说一下,我正在使用动态子域,因此只需要将www重定向到非www,而不是其他子域名。
Route::group(array('domain' => 'myapp.co'), function() {

    Route::get('/', function() {
        return 'Hello! Welcome to main page...';
    });
    Route::get('/login', function() {
        return 'Login';
    });
    Route::get('/signup', function() {
        return 'Signup';
    });

});

Route::group(array('domain' => '{account}.myapp.co'), function() {

    Route::get('/', function($account) {

        if ($account == 'www') {
            return Redirect::to('http://myapp.co');
        }
        return $account;
    });

});

可能是在.htaccess中将非www重定向到www的重复问题。 - Bogdan
@Bogdan,你提到的那个与 OP 所问的相反。它不是重复的。它是相反的。 - Anbuselvan Rocky
6个回答

17
如果您真的想以编程方式解决您的问题,我认为最佳解决方案是将下面的代码添加到您的filters.php文件中:
App::before(function($request){
   //Remove the 'www.' from all domains
   if (substr($request->header('host'), 0, 4) === 'www.') {
      $request->headers->set('host', 'myapp.co');
      return Redirect::to($request->path());
   }
});

基本上,我只是在创建一个过滤器来检查请求是否以'www.'开头,并在这种情况下将客户端重定向到相同路径但没有'www.'。


我必须在代码内部执行重定向,这非常完美! - Patrick
如果有人遇到这个问题,当我使用上面的代码时,我遇到了“Class App\Http\Controllers\Redirect not found”的问题,我通过在顶部添加“use Redirect”来解决它。 - Jass

12
也许您可以在public文件夹中使用.htaccess文件进行重定向。
以下是一个示例:
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} !localhost
    RewriteCond %{HTTP_HOST} !^(.+)\.(.+)\.(.+)
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
</IfModule>

基本上,这里我正在测试主机是否不是localhost和非子域名(形式为abc.xyz.tldn),然后才会重定向到www。 我在多个项目中使用这种代码,但还没有进行过测试。我希望它能够开箱即用。

编辑: 另一种无需复杂模式匹配即可完成的方法在此处描述: 在htaccess中将非www重定向到www 但是,此解决方案需要在htaccess中硬编码您的域名。(根据您的设置可能是问题也可能不是)


谢谢,它有效。但我有一个问题。当我尝试 test1.myapp.co 时,我被重定向到 www.test1.myapp.co,这不是我想要的。我只想让它变成 test1.myapp.co - Port 8080
顺便说一下,它在Firefox上可以正常工作。也许我需要在Chrome中删除缓存。 - Port 8080

7

将以下代码添加到您的.htaccess文件中:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]

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

2

尝试使用https://dev59.com/xW445IYBdhLWcg3wUoxe#4958847中的方法。 如果无法成功,可能是因为您正在使用nginx

# Force WWW:
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

0

.htaccess

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

-3

将www重定向到非www网址

今天我们学习如何将www网址重定向到非www网址

现在此网站同时适用于www和非www

使用.htaccess文件将www重定向到非www网址的步骤

  1. 进入FileZilla文件管理器
  2. 选择您的网站
  3. 打开.htaccess文件
  4. 将以下代码复制到.htaccess文件中

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
    RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
    
  5. 将example替换为您的域名

  6. 粘贴到.htaccess文件中
  7. 检查是否生效

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接