How to Install Magento 2.3.7 Under Xampp Windows 10?

Magento 23.7 only supports the command line to install under Windows 10. Here are some issues you may meet

Issue One:
403 Error. After you loaded all files to your web, and have run xampp successfully, you may get 403 error when you visit HTTP://localhost.
Usually, .htaccess makes the problem, simple way to check, just remove or deleted .htaccess, if you can visit http:/www.local successfully, then you can change the following:

## Deny access to root files to hide sensitive application information
RedirectMatch 403 /\.git

<Files composer.json>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files composer.lock>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files .gitignore>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files .htaccess>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files .htaccess.sample>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files .php_cs.dist>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files .travis.yml>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files CHANGELOG.md>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files COPYING.txt>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files Gruntfile.js>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files LICENSE.txt>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files LICENSE_AFL.txt>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files nginx.conf.sample>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files package.json>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files php.ini.sample>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files README.md>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files magento_umask>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files auth.json>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>
<Files .user.ini>
<IfVersion < 2.4>
order allow,deny
deny from all
</IfVersion>
<IfVersion >= 2.4>
Require all denied
</IfVersion>
</Files>

# For 404s and 403s that aren't handled by the application, show plain 404 response
ErrorDocument 404 /pub/errors/404.php
ErrorDocument 403 /pub/errors/404.php

to:

## Deny access to root files to hide sensitive application information
RedirectMatch 404 /\.git

<Files composer.json>
order allow,deny
deny from all
</Files>
<Files composer.lock>
order allow,deny
deny from all
</Files>
<Files .gitignore>
order allow,deny
deny from all
</Files>
<Files .htaccess>
order allow,deny
deny from all
</Files>
<Files .htaccess.sample>
order allow,deny
deny from all
</Files>
<Files .php_cs>
order allow,deny
deny from all
</Files>
<Files .travis.yml>
order allow,deny
deny from all
</Files>
<Files CHANGELOG.md>
order allow,deny
deny from all
</Files>
<Files CONTRIBUTING.md>
order allow,deny
deny from all
</Files>
<Files CONTRIBUTOR_LICENSE_AGREEMENT.html>
order allow,deny
deny from all
</Files>
<Files COPYING.txt>
order allow,deny
deny from all
</Files>
<Files Gruntfile.js>
order allow,deny
deny from all
</Files>
<Files LICENSE.txt>
order allow,deny
deny from all
</Files>
<Files LICENSE_AFL.txt>
order allow,deny
deny from all
</Files>
<Files nginx.conf.sample>
order allow,deny
deny from all
</Files>
<Files package.json>
order allow,deny
deny from all
</Files>
<Files php.ini.sample>
order allow,deny
deny from all
</Files>
<Files README.md>
order allow,deny
deny from all
</Files>

# For 404s and 403s that aren't handled by the application, show plain 404 response
ErrorDocument 404 /pub/errors/404.php
ErrorDocument 403 /pub/errors/404.php

Issues Two, you may can not run composer successfully, and got the following:

C: Users Tiger>composer
PHP Warning:  PHP Startup: Unable to load dynamic library bz2 (tried:  xampp php ext bz2 ,  xampp php ext php_bz2.dll in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library bz2 (tried:  xampp php ext bz2 ,  xampp php ext php_bz2.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library curl (tried:  xampp php ext curl ,  xampp php ext php_curl.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library curl (tried:  xampp php ext curl ,  xampp php ext php_curl.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library fileinfo (tried:  xampp php ext fileinfo ,  xampp php ext php_fileinfo.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library fileinfo (tried:  xampp php ext fileinfo ,  xampp php ext php_fileinfo.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library gd2 (tried:  xampp php ext gd2 ,  xampp php ext php_gd2.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library gd2 (tried:  xampp php ext gd2 ,  xampp php ext php_gd2.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library gettext (tried:  xampp php ext gettext ,  xampp php ext php_gettext.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library gettext (tried:  xampp php ext gettext ,  xampp php ext php_gettext.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library mbstring (tried:  xampp php ext mbstring ,  xampp php ext php_mbstring.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library mbstring (tried:  xampp php ext mbstring ,  xampp php ext php_mbstring.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library exif (tried:  xampp php ext exif ,  xampp php ext php_exif.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library exif (tried:  xampp php ext exif ,  xampp php ext php_exif.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library mysqli (tried:  xampp php ext mysqli ,  xampp php ext php_mysqli.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library mysqli (tried:  xampp php ext mysqli,  xampp php ext php_mysqli.dll  in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library pdo_mysql (tried:  xampp php ext pdo_mysql ,  xampp php ext php_pdo_mysql.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library pdo_mysql (tried:  xampp php ext pdo_mysql ,  xampp php ext php_pdo_mysql.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library pdo_sqlite (tried:  xampp php ext pdo_sqlite ,  xampp php ext php_pdo_sqlite.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library pdo_sqlite (tried:  xampp php ext pdo_sqlite ,  xampp php ext php_pdo_sqlite.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library php_openssl.dll (tried:  xampp php ext php_openssl.dll ,  xampp php ext php_php_openssl.dll.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library php_openssl.dll (tried:  xampp php ext php_openssl.dll (???? ?????),  xampp php ext php_php_openssl.dll.dll  in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library php_ftp.dll (tried:  xampp php ext php_ftp.dll ,  xampp php ext php_php_ftp.dll.dll  in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library php_ftp.dll (tried:  xampp php ext php_ftp.dll,  xampp php ext php_php_ftp.dll.dll  in Unknown on line 0
PHP Warning:  Cannot open  xampp php extras browscap.ini for reading in Unknown on line 0

Warning: Cannot open  xampp php extras browscap.ini for reading in Unknown on line 0

Just go to the root of your web and run again!

Issue Three, when you install Magento by command line, you may get the following error messages:

PHP Fatal error:  Uncaught Error: Class Locale not found in I:\xampp\htdocs\vendor\magento\framework\Locale\Bundle\DataBundle.php:64
Stack trace:
#0 I:\xampp\htdocs\vendor\magento\framework\Locale\Bundle\DataBundle.php(28): Magento\Framework\Locale\Bundle\DataBundle->cleanLocale(en_US)
#1 I:\xampp\htdocs\vendor\magento\framework\Setup\Lists.php(96): Magento\Framework\Locale\Bundle\DataBundle->get(en_US)
#2 I:\xampp\htdocs\vendor\magento\framework\Validator\Locale.php(42): Magento\Framework\Setup\Lists->getLocaleList()
#3 I:\xampp\htdocs\setup\src\Magento\Setup\Console\Command\InstallStoreConfigurationCommand.php(321): Magento\Framework\Validator\Locale->isValid(en_US)
#4 I:\xampp\htdocs\setup\src\Magento\Setup\Console\Command\InstallStoreConfigurationCommand.php(241): Magento\Setup\Console\Command\InstallStoreConfigurationCommand->validateCodes(Object(Magento\Framework\Validator\Locale), en_US, language)
#5 I:\xampp\htdocs\setup\src\Magento\Setup\Console\Command\InstallCommand.php(258): Magento\Setup\Console\Co in I:\xampp\htdocs\vendor\magento\framework\Locale\Bundle\DataBundle.php on line 64

Fatal error: Uncaught Error: Class Locale not found in I:\xampp\htdocs\vendor\magento\framework\Locale\Bundle\DataBundle.php:64
Stack trace:
#0 I:\xampp\htdocs\vendor\magento\framework\Locale\Bundle\DataBundle.php(28): Magento\Framework\Locale\Bundle\DataBundle->cleanLocale(en_US)
#1 I:\xampp\htdocs\vendor\magento\framework\Setup\Lists.php(96): Magento\Framework\Locale\Bundle\DataBundle->get(en_US)
#2 I:\xampp\htdocs\vendor\magento\framework\Validator\Locale.php(42): Magento\Framework\Setup\Lists->getLocaleList()
#3 I:\xampp\htdocs\setup\src\Magento\Setup\Console\Command\InstallStoreConfigurationCommand.php(321): Magento\Framework\Validator\Locale->isValid(en_US)
#4 I:\xampp\htdocs\setup\src\Magento\Setup\Console\Command\InstallStoreConfigurationCommand.php(241): Magento\Setup\Console\Command\InstallStoreConfigurationCommand->validateCodes(Object(Magento\Framework\Validator\Locale), en_US, language)
#5 I:\xampp\htdocs\setup\src\Magento\Setup\Console\Command\InstallCommand.php(258): Magento\Setup\Console\Co in I:\xampp\htdocs\vendor\magento\framework\Locale\Bundle\DataBundle.php on line 64

How to deal with these? Just add the following 2 lines to php.ini

extension=php_intl.dll
extension=php_xsl.dll

We also need remove # for the following 2 lines:

extension=soap    ;
extension=sockets  ;

If you can find the two lines in php.ini, then remove #, if you can not find them, then add the above 2 lines.

Issues Four, you may get the following error information:

In PatchApplier.php line 170:

  Unable to apply data patch Magento\Theme\Setup\Patch\Data\RegisterThemes for module Magento_Theme. Original exception
  message: Wrong file

How to deal with this error then, edit “vendor\magento\framework\Image\Adapter\Gd2.php”, change:

    private function validateURLScheme(string $filename) : bool
    {
        $allowed_schemes = ['ftp', 'ftps', 'http', 'https'];
        $url = parse_url($filename);
        if ($url && isset($url['scheme']) && !in_array($url['scheme'], $allowed_schemes)) {
            return false;
        }

        return true;
    }

to:

        private function validateURLScheme(string $filename) : bool
    {
        $allowed_schemes = ['ftp', 'ftps', 'http', 'https'];
        $url = parse_url($filename);
        //if ($url && isset($url['scheme']) && !in_array($url['scheme'], $allowed_schemes)) {
        if ($url && isset($url['scheme']) && !in_array($url['scheme'], $allowed_schemes) && !file_exists($filename)) {    
            return false;
        }
 
        return true;
    }