2 |
3 | Drupal is an open source content management platform supporting a variety of
4 | websites ranging from personal weblogs to large community-driven websites. For
5 | more information, visit the Drupal website, [Drupal.org][Drupal.org], and join
6 | the [Drupal community][Drupal community].
7 |
8 | ## Contributing
9 |
10 | Drupal is developed on [Drupal.org][Drupal.org], the home of the international
11 | Drupal community since 2001!
12 |
13 | [Drupal.org][Drupal.org] hosts Drupal's [GitLab repository][GitLab repository],
14 | its [issue queue][issue queue], and its [documentation][documentation]. Before
15 | you start working on code, be sure to search the [issue queue][issue queue] and
16 | create an issue if your aren't able to find an existing issue.
17 |
18 | Every issue on Drupal.org automatically creates a new community-accessible fork
19 | that you can contribute to. Learn more about the code contribution process on
20 | the [Issue forks & merge requests page][issue forks].
21 |
22 | ## Usage
23 |
24 | For a brief introduction, see [USAGE.txt](/core/USAGE.txt). You can also find
25 | guides, API references, and more by visiting Drupal's [documentation
26 | page][documentation].
27 |
28 | You can quickly extend Drupal's core feature set by installing any of its
29 | [thousands of free and open source modules][modules]. With Drupal and its
30 | module ecosystem, you can often build most or all of what your project needs
31 | before writing a single line of code.
32 |
33 | ## Changelog
34 |
35 | Drupal keeps detailed [change records][changelog]. You can search Drupal's
36 | changes for a record of every notable breaking change and new feature since
37 | 2011.
38 |
39 | ## Security
40 |
41 | For a list of security announcements, see the [Security advisories
42 | page][Security advisories] (available as [an RSS feed][security RSS]). This
43 | page also describes how to subscribe to these announcements via email.
44 |
45 | For information about the Drupal security process, or to find out how to report
46 | a potential security issue to the Drupal security team, see the [Security team
47 | page][security team].
48 |
49 | ## Need a helping hand?
50 |
51 | Visit the [Support page][support] or browse [over a thousand Drupal
52 | providers][service providers] offering design, strategy, development, and
53 | hosting services.
54 |
55 | ## Legal matters
56 |
57 | Know your rights when using Drupal by reading Drupal core's
58 | [license](/core/LICENSE.txt).
59 |
60 | Learn about the [Drupal trademark and logo policy here][trademark].
61 |
62 | [Drupal.org]: https://www.drupal.org
63 | [Drupal community]: https://www.drupal.org/community
64 | [GitLab repository]: https://git.drupalcode.org/project/drupal
65 | [issue queue]: https://www.drupal.org/project/issues/drupal
66 | [issue forks]: https://www.drupal.org/drupalorg/docs/gitlab-integration/issue-forks-merge-requests
67 | [documentation]: https://www.drupal.org/documentation
68 | [changelog]: https://www.drupal.org/list-changes/drupal
69 | [modules]: https://www.drupal.org/project/project_module
70 | [security advisories]: https://www.drupal.org/security
71 | [security RSS]: https://www.drupal.org/security/rss.xml
72 | [security team]: https://www.drupal.org/drupal-security-team
73 | [service providers]: https://www.drupal.org/drupal-services
74 | [support]: https://www.drupal.org/support
75 | [trademark]: https://www.drupal.com/trademark
76 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "drupal/recommended-project",
3 | "description": "Project template for Drupal 9 projects with a relocated document root",
4 | "type": "project",
5 | "license": "GPL-2.0-or-later",
6 | "homepage": "https://www.drupal.org/project/drupal",
7 | "support": {
8 | "docs": "https://www.drupal.org/docs/user_guide/en/index.html",
9 | "chat": "https://www.drupal.org/node/314178"
10 | },
11 | "repositories": [
12 | {
13 | "type": "composer",
14 | "url": "https://packages.drupal.org/8"
15 | }
16 | ],
17 | "require": {
18 | "composer/installers": "^1.9",
19 | "drupal/core-composer-scaffold": "^9.2",
20 | "drupal/core-project-message": "^9.2",
21 | "drupal/core-recommended": "^9.2",
22 | "drush/drush": "^10.5"
23 | },
24 | "conflict": {
25 | "drupal/drupal": "*"
26 | },
27 | "minimum-stability": "stable",
28 | "prefer-stable": true,
29 | "config": {
30 | "sort-packages": true
31 | },
32 | "extra": {
33 | "drupal-scaffold": {
34 | "locations": {
35 | "web-root": "web/"
36 | }
37 | },
38 | "installer-paths": {
39 | "web/core": [
40 | "type:drupal-core"
41 | ],
42 | "web/libraries/{$name}": [
43 | "type:drupal-library"
44 | ],
45 | "web/modules/contrib/{$name}": [
46 | "type:drupal-module"
47 | ],
48 | "web/profiles/contrib/{$name}": [
49 | "type:drupal-profile"
50 | ],
51 | "web/themes/contrib/{$name}": [
52 | "type:drupal-theme"
53 | ],
54 | "drush/Commands/contrib/{$name}": [
55 | "type:drupal-drush"
56 | ],
57 | "web/modules/custom/{$name}": [
58 | "type:drupal-custom-module"
59 | ],
60 | "web/profiles/custom/{$name}": [
61 | "type:drupal-custom-profile"
62 | ],
63 | "web/themes/custom/{$name}": [
64 | "type:drupal-custom-theme"
65 | ]
66 | },
67 | "drupal-core-project-message": {
68 | "include-keys": [
69 | "homepage",
70 | "support"
71 | ],
72 | "post-create-project-cmd-message": [
73 | "The requested URL "@path" was not found on this server.
'; 680 | 681 | /** 682 | * Load services definition file. 683 | */ 684 | $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; 685 | 686 | /** 687 | * Override the default service container class. 688 | * 689 | * This is useful for example to trace the service container for performance 690 | * tracking purposes, for testing a service container with an error condition or 691 | * to test a service container that throws an exception. 692 | */ 693 | # $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; 694 | 695 | /** 696 | * Override the default yaml parser class. 697 | * 698 | * Provide a fully qualified class name here if you would like to provide an 699 | * alternate implementation YAML parser. The class must implement the 700 | * \Drupal\Component\Serialization\SerializationInterface interface. 701 | */ 702 | # $settings['yaml_parser_class'] = NULL; 703 | 704 | /** 705 | * Trusted host configuration. 706 | * 707 | * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host 708 | * header spoofing. 709 | * 710 | * To enable the trusted host mechanism, you enable your allowable hosts 711 | * in $settings['trusted_host_patterns']. This should be an array of regular 712 | * expression patterns, without delimiters, representing the hosts you would 713 | * like to allow. 714 | * 715 | * For example: 716 | * @code 717 | * $settings['trusted_host_patterns'] = [ 718 | * '^www\.example\.com$', 719 | * ]; 720 | * @endcode 721 | * will allow the site to only run from www.example.com. 722 | * 723 | * If you are running multisite, or if you are running your site from 724 | * different domain names (eg, you don't redirect http://www.example.com to 725 | * http://example.com), you should specify all of the host patterns that are 726 | * allowed by your site. 727 | * 728 | * For example: 729 | * @code 730 | * $settings['trusted_host_patterns'] = [ 731 | * '^example\.com$', 732 | * '^.+\.example\.com$', 733 | * '^example\.org$', 734 | * '^.+\.example\.org$', 735 | * ]; 736 | * @endcode 737 | * will allow the site to run off of all variants of example.com and 738 | * example.org, with all subdomains included. 739 | */ 740 | 741 | /** 742 | * The default list of directories that will be ignored by Drupal's file API. 743 | * 744 | * By default ignore node_modules and bower_components folders to avoid issues 745 | * with common frontend tools and recursive scanning of directories looking for 746 | * extensions. 747 | * 748 | * @see \Drupal\Core\File\FileSystemInterface::scanDirectory() 749 | * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() 750 | */ 751 | $settings['file_scan_ignore_directories'] = [ 752 | 'node_modules', 753 | 'bower_components', 754 | ]; 755 | 756 | /** 757 | * The default number of entities to update in a batch process. 758 | * 759 | * This is used by update and post-update functions that need to go through and 760 | * change all the entities on a site, so it is useful to increase this number 761 | * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a 762 | * larger number of entities to be processed in a single batch run. 763 | */ 764 | $settings['entity_update_batch_size'] = 50; 765 | 766 | /** 767 | * Entity update backup. 768 | * 769 | * This is used to inform the entity storage handler that the backup tables as 770 | * well as the original entity type and field storage definitions should be 771 | * retained after a successful entity update process. 772 | */ 773 | $settings['entity_update_backup'] = TRUE; 774 | 775 | /** 776 | * Node migration type. 777 | * 778 | * This is used to force the migration system to use the classic node migrations 779 | * instead of the default complete node migrations. The migration system will 780 | * use the classic node migration only if there are existing migrate_map tables 781 | * for the classic node migrations and they contain data. These tables may not 782 | * exist if you are developing custom migrations and do not want to use the 783 | * complete node migrations. Set this to TRUE to force the use of the classic 784 | * node migrations. 785 | */ 786 | $settings['migrate_node_migrate_type_classic'] = FALSE; 787 | 788 | /** 789 | * Load local development override configuration, if available. 790 | * 791 | * Create a settings.local.php file to override variables on secondary (staging, 792 | * development, etc.) installations of this site. 793 | * 794 | * Typical uses of settings.local.php include: 795 | * - Disabling caching. 796 | * - Disabling JavaScript/CSS compression. 797 | * - Rerouting outgoing emails. 798 | * 799 | * Keep this code block at the end of this file to take full effect. 800 | */ 801 | # 802 | # if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { 803 | # include $app_root . '/' . $site_path . '/settings.local.php'; 804 | # } 805 | -------------------------------------------------------------------------------- /web/sites/default/settings.php: -------------------------------------------------------------------------------- 1 | 'databasename', 81 | * 'username' => 'sqlusername', 82 | * 'password' => 'sqlpassword', 83 | * 'host' => 'localhost', 84 | * 'port' => '3306', 85 | * 'driver' => 'mysql', 86 | * 'prefix' => '', 87 | * 'collation' => 'utf8mb4_general_ci', 88 | * ]; 89 | * @endcode 90 | */ 91 | $databases = []; 92 | 93 | /** 94 | * Customizing database settings. 95 | * 96 | * Many of the values of the $databases array can be customized for your 97 | * particular database system. Refer to the sample in the section above as a 98 | * starting point. 99 | * 100 | * The "driver" property indicates what Drupal database driver the 101 | * connection should use. This is usually the same as the name of the 102 | * database type, such as mysql or sqlite, but not always. The other 103 | * properties will vary depending on the driver. For SQLite, you must 104 | * specify a database file name in a directory that is writable by the 105 | * webserver. For most other drivers, you must specify a 106 | * username, password, host, and database name. 107 | * 108 | * Drupal core implements drivers for mysql, pgsql, and sqlite. Other drivers 109 | * can be provided by contributed or custom modules. To use a contributed or 110 | * custom driver, the "namespace" property must be set to the namespace of the 111 | * driver. The code in this namespace must be autoloadable prior to connecting 112 | * to the database, and therefore, prior to when module root namespaces are 113 | * added to the autoloader. To add the driver's namespace to the autoloader, 114 | * set the "autoload" property to the PSR-4 base directory of the driver's 115 | * namespace. This is optional for projects managed with Composer if the 116 | * driver's namespace is in Composer's autoloader. 117 | * 118 | * For each database, you may optionally specify multiple "target" databases. 119 | * A target database allows Drupal to try to send certain queries to a 120 | * different database if it can but fall back to the default connection if not. 121 | * That is useful for primary/replica replication, as Drupal may try to connect 122 | * to a replica server when appropriate and if one is not available will simply 123 | * fall back to the single primary server (The terms primary/replica are 124 | * traditionally referred to as master/slave in database server documentation). 125 | * 126 | * The general format for the $databases array is as follows: 127 | * @code 128 | * $databases['default']['default'] = $info_array; 129 | * $databases['default']['replica'][] = $info_array; 130 | * $databases['default']['replica'][] = $info_array; 131 | * $databases['extra']['default'] = $info_array; 132 | * @endcode 133 | * 134 | * In the above example, $info_array is an array of settings described above. 135 | * The first line sets a "default" database that has one primary database 136 | * (the second level default). The second and third lines create an array 137 | * of potential replica databases. Drupal will select one at random for a given 138 | * request as needed. The fourth line creates a new database with a name of 139 | * "extra". 140 | * 141 | * You can optionally set prefixes for some or all database table names 142 | * by using the 'prefix' setting. If a prefix is specified, the table 143 | * name will be prepended with its value. Be sure to use valid database 144 | * characters only, usually alphanumeric and underscore. If no prefixes 145 | * are desired, leave it as an empty string ''. 146 | * 147 | * To have all database names prefixed, set 'prefix' as a string: 148 | * @code 149 | * 'prefix' => 'main_', 150 | * @endcode 151 | * 152 | * Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in 153 | * Drupal 9.0. After that, only a single prefix for all tables will be 154 | * supported. 155 | * 156 | * To provide prefixes for specific tables, set 'prefix' as an array. 157 | * The array's keys are the table names and the values are the prefixes. 158 | * The 'default' element is mandatory and holds the prefix for any tables 159 | * not specified elsewhere in the array. Example: 160 | * @code 161 | * 'prefix' => [ 162 | * 'default' => 'main_', 163 | * 'users' => 'shared_', 164 | * 'sessions' => 'shared_', 165 | * 'role' => 'shared_', 166 | * 'authmap' => 'shared_', 167 | * ], 168 | * @endcode 169 | * You can also use a reference to a schema/database as a prefix. This may be 170 | * useful if your Drupal installation exists in a schema that is not the default 171 | * or you want to access several databases from the same code base at the same 172 | * time. 173 | * Example: 174 | * @code 175 | * 'prefix' => [ 176 | * 'default' => 'main.', 177 | * 'users' => 'shared.', 178 | * 'sessions' => 'shared.', 179 | * 'role' => 'shared.', 180 | * 'authmap' => 'shared.', 181 | * ]; 182 | * @endcode 183 | * NOTE: MySQL and SQLite's definition of a schema is a database. 184 | * 185 | * Advanced users can add or override initial commands to execute when 186 | * connecting to the database server, as well as PDO connection settings. For 187 | * example, to enable MySQL SELECT queries to exceed the max_join_size system 188 | * variable, and to reduce the database connection timeout to 5 seconds: 189 | * @code 190 | * $databases['default']['default'] = [ 191 | * 'init_commands' => [ 192 | * 'big_selects' => 'SET SQL_BIG_SELECTS=1', 193 | * ], 194 | * 'pdo' => [ 195 | * PDO::ATTR_TIMEOUT => 5, 196 | * ], 197 | * ]; 198 | * @endcode 199 | * 200 | * WARNING: The above defaults are designed for database portability. Changing 201 | * them may cause unexpected behavior, including potential data loss. See 202 | * https://www.drupal.org/developing/api/database/configuration for more 203 | * information on these defaults and the potential issues. 204 | * 205 | * More details can be found in the constructor methods for each driver: 206 | * - \Drupal\Core\Database\Driver\mysql\Connection::__construct() 207 | * - \Drupal\Core\Database\Driver\pgsql\Connection::__construct() 208 | * - \Drupal\Core\Database\Driver\sqlite\Connection::__construct() 209 | * 210 | * Sample Database configuration format for PostgreSQL (pgsql): 211 | * @code 212 | * $databases['default']['default'] = [ 213 | * 'driver' => 'pgsql', 214 | * 'database' => 'databasename', 215 | * 'username' => 'sqlusername', 216 | * 'password' => 'sqlpassword', 217 | * 'host' => 'localhost', 218 | * 'prefix' => '', 219 | * ]; 220 | * @endcode 221 | * 222 | * Sample Database configuration format for SQLite (sqlite): 223 | * @code 224 | * $databases['default']['default'] = [ 225 | * 'driver' => 'sqlite', 226 | * 'database' => '/path/to/databasefilename', 227 | * ]; 228 | * @endcode 229 | * 230 | * Sample Database configuration format for a driver in a contributed module: 231 | * @code 232 | * $databases['default']['default'] = [ 233 | * 'driver' => 'my_driver', 234 | * 'namespace' => 'Drupal\my_module\Driver\Database\my_driver', 235 | * 'autoload' => 'modules/my_module/src/Driver/Database/my_driver/', 236 | * 'database' => 'databasename', 237 | * 'username' => 'sqlusername', 238 | * 'password' => 'sqlpassword', 239 | * 'host' => 'localhost', 240 | * 'prefix' => '', 241 | * ]; 242 | * @endcode 243 | */ 244 | 245 | /** 246 | * Location of the site configuration files. 247 | * 248 | * The $settings['config_sync_directory'] specifies the location of file system 249 | * directory used for syncing configuration data. On install, the directory is 250 | * created. This is used for configuration imports. 251 | * 252 | * The default location for this directory is inside a randomly-named 253 | * directory in the public files path. The setting below allows you to set 254 | * its location. 255 | */ 256 | # $settings['config_sync_directory'] = '/directory/outside/webroot'; 257 | 258 | /** 259 | * Settings: 260 | * 261 | * $settings contains environment-specific configuration, such as the files 262 | * directory and reverse proxy address, and temporary configuration, such as 263 | * security overrides. 264 | * 265 | * @see \Drupal\Core\Site\Settings::get() 266 | */ 267 | 268 | /** 269 | * Salt for one-time login links, cancel links, form tokens, etc. 270 | * 271 | * This variable will be set to a random value by the installer. All one-time 272 | * login links will be invalidated if the value is changed. Note that if your 273 | * site is deployed on a cluster of web servers, you must ensure that this 274 | * variable has the same value on each server. 275 | * 276 | * For enhanced security, you may set this variable to the contents of a file 277 | * outside your document root; you should also ensure that this file is not 278 | * stored with backups of your database. 279 | * 280 | * Example: 281 | * @code 282 | * $settings['hash_salt'] = file_get_contents('/home/example/salt.txt'); 283 | * @endcode 284 | */ 285 | # $settings['hash_salt'] = ''; 286 | 287 | /** 288 | * Deployment identifier. 289 | * 290 | * Drupal's dependency injection container will be automatically invalidated and 291 | * rebuilt when the Drupal core version changes. When updating contributed or 292 | * custom code that changes the container, changing this identifier will also 293 | * allow the container to be invalidated as soon as code is deployed. 294 | */ 295 | # $settings['deployment_identifier'] = \Drupal::VERSION; 296 | 297 | /** 298 | * Access control for update.php script. 299 | * 300 | * If you are updating your Drupal installation using the update.php script but 301 | * are not logged in using either an account with the "Administer software 302 | * updates" permission or the site maintenance account (the account that was 303 | * created during installation), you will need to modify the access check 304 | * statement below. Change the FALSE to a TRUE to disable the access check. 305 | * After finishing the upgrade, be sure to open this file again and change the 306 | * TRUE back to a FALSE! 307 | */ 308 | $settings['update_free_access'] = FALSE; 309 | 310 | /** 311 | * Fallback to HTTP for Update Manager and for fetching security advisories. 312 | * 313 | * If your site fails to connect to updates.drupal.org over HTTPS (either when 314 | * fetching data on available updates, or when fetching the feed of critical 315 | * security announcements), you may uncomment this setting and set it to TRUE to 316 | * allow an insecure fallback to HTTP. Note that doing so will open your site up 317 | * to a potential man-in-the-middle attack. You should instead attempt to 318 | * resolve the issues before enabling this option. 319 | * @see https://www.drupal.org/docs/system-requirements/php-requirements#openssl 320 | * @see https://en.wikipedia.org/wiki/Man-in-the-middle_attack 321 | * @see \Drupal\update\UpdateFetcher 322 | * @see \Drupal\system\SecurityAdvisories\SecurityAdvisoriesFetcher 323 | */ 324 | # $settings['update_fetch_with_http_fallback'] = TRUE; 325 | 326 | /** 327 | * External access proxy settings: 328 | * 329 | * If your site must access the Internet via a web proxy then you can enter the 330 | * proxy settings here. Set the full URL of the proxy, including the port, in 331 | * variables: 332 | * - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP 333 | * requests. 334 | * - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS 335 | * requests. 336 | * You can pass in the user name and password for basic authentication in the 337 | * URLs in these settings. 338 | * 339 | * You can also define an array of host names that can be accessed directly, 340 | * bypassing the proxy, in $settings['http_client_config']['proxy']['no']. 341 | */ 342 | # $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080'; 343 | # $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080'; 344 | # $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost']; 345 | 346 | /** 347 | * Reverse Proxy Configuration: 348 | * 349 | * Reverse proxy servers are often used to enhance the performance 350 | * of heavily visited sites and may also provide other site caching, 351 | * security, or encryption benefits. In an environment where Drupal 352 | * is behind a reverse proxy, the real IP address of the client should 353 | * be determined such that the correct client IP address is available 354 | * to Drupal's logging, statistics, and access management systems. In 355 | * the most simple scenario, the proxy server will add an 356 | * X-Forwarded-For header to the request that contains the client IP 357 | * address. However, HTTP headers are vulnerable to spoofing, where a 358 | * malicious client could bypass restrictions by setting the 359 | * X-Forwarded-For header directly. Therefore, Drupal's proxy 360 | * configuration requires the IP addresses of all remote proxies to be 361 | * specified in $settings['reverse_proxy_addresses'] to work correctly. 362 | * 363 | * Enable this setting to get Drupal to determine the client IP from the 364 | * X-Forwarded-For header. If you are unsure about this setting, do not have a 365 | * reverse proxy, or Drupal operates in a shared hosting environment, this 366 | * setting should remain commented out. 367 | * 368 | * In order for this setting to be used you must specify every possible 369 | * reverse proxy IP address in $settings['reverse_proxy_addresses']. 370 | * If a complete list of reverse proxies is not available in your 371 | * environment (for example, if you use a CDN) you may set the 372 | * $_SERVER['REMOTE_ADDR'] variable directly in settings.php. 373 | * Be aware, however, that it is likely that this would allow IP 374 | * address spoofing unless more advanced precautions are taken. 375 | */ 376 | # $settings['reverse_proxy'] = TRUE; 377 | 378 | /** 379 | * Specify every reverse proxy IP address in your environment. 380 | * This setting is required if $settings['reverse_proxy'] is TRUE. 381 | */ 382 | # $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...]; 383 | 384 | /** 385 | * Reverse proxy trusted headers. 386 | * 387 | * Sets which headers to trust from your reverse proxy. 388 | * 389 | * Common values are: 390 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 391 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 392 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 393 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 394 | * - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 395 | * 396 | * Note the default value of 397 | * @code 398 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 399 | * @endcode 400 | * is not secure by default. The value should be set to only the specific 401 | * headers the reverse proxy uses. For example: 402 | * @code 403 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 404 | * @endcode 405 | * This would trust the following headers: 406 | * - X_FORWARDED_FOR 407 | * - X_FORWARDED_HOST 408 | * - X_FORWARDED_PROTO 409 | * - X_FORWARDED_PORT 410 | * 411 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 412 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 413 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 414 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 415 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 416 | * @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies 417 | */ 418 | # $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED; 419 | 420 | 421 | /** 422 | * Page caching: 423 | * 424 | * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page 425 | * views. This tells a HTTP proxy that it may return a page from its local 426 | * cache without contacting the web server, if the user sends the same Cookie 427 | * header as the user who originally requested the cached page. Without "Vary: 428 | * Cookie", authenticated users would also be served the anonymous page from 429 | * the cache. If the site has mostly anonymous users except a few known 430 | * editors/administrators, the Vary header can be omitted. This allows for 431 | * better caching in HTTP proxies (including reverse proxies), i.e. even if 432 | * clients send different cookies, they still get content served from the cache. 433 | * However, authenticated users should access the site directly (i.e. not use an 434 | * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid 435 | * getting cached pages from the proxy. 436 | */ 437 | # $settings['omit_vary_cookie'] = TRUE; 438 | 439 | 440 | /** 441 | * Cache TTL for client error (4xx) responses. 442 | * 443 | * Items cached per-URL tend to result in a large number of cache items, and 444 | * this can be problematic on 404 pages which by their nature are unbounded. A 445 | * fixed TTL can be set for these items, defaulting to one hour, so that cache 446 | * backends which do not support LRU can purge older entries. To disable caching 447 | * of client error responses set the value to 0. Currently applies only to 448 | * page_cache module. 449 | */ 450 | # $settings['cache_ttl_4xx'] = 3600; 451 | 452 | /** 453 | * Expiration of cached forms. 454 | * 455 | * Drupal's Form API stores details of forms in a cache and these entries are 456 | * kept for at least 6 hours by default. Expired entries are cleared by cron. 457 | * 458 | * @see \Drupal\Core\Form\FormCache::setCache() 459 | */ 460 | # $settings['form_cache_expiration'] = 21600; 461 | 462 | /** 463 | * Class Loader. 464 | * 465 | * If the APCu extension is detected, the classloader will be optimized to use 466 | * it. Set to FALSE to disable this. 467 | * 468 | * @see https://getcomposer.org/doc/articles/autoloader-optimization.md 469 | */ 470 | # $settings['class_loader_auto_detect'] = FALSE; 471 | 472 | /** 473 | * Authorized file system operations: 474 | * 475 | * The Update Manager module included with Drupal provides a mechanism for 476 | * site administrators to securely install missing updates for the site 477 | * directly through the web user interface. On securely-configured servers, 478 | * the Update manager will require the administrator to provide SSH or FTP 479 | * credentials before allowing the installation to proceed; this allows the 480 | * site to update the new files as the user who owns all the Drupal files, 481 | * instead of as the user the webserver is running as. On servers where the 482 | * webserver user is itself the owner of the Drupal files, the administrator 483 | * will not be prompted for SSH or FTP credentials (note that these server 484 | * setups are common on shared hosting, but are inherently insecure). 485 | * 486 | * Some sites might wish to disable the above functionality, and only update 487 | * the code directly via SSH or FTP themselves. This setting completely 488 | * disables all functionality related to these authorized file operations. 489 | * 490 | * @see https://www.drupal.org/node/244924 491 | * 492 | * Remove the leading hash signs to disable. 493 | */ 494 | # $settings['allow_authorize_operations'] = FALSE; 495 | 496 | /** 497 | * Default mode for directories and files written by Drupal. 498 | * 499 | * Value should be in PHP Octal Notation, with leading zero. 500 | */ 501 | # $settings['file_chmod_directory'] = 0775; 502 | # $settings['file_chmod_file'] = 0664; 503 | 504 | /** 505 | * Public file base URL: 506 | * 507 | * An alternative base URL to be used for serving public files. This must 508 | * include any leading directory path. 509 | * 510 | * A different value from the domain used by Drupal to be used for accessing 511 | * public files. This can be used for a simple CDN integration, or to improve 512 | * security by serving user-uploaded files from a different domain or subdomain 513 | * pointing to the same server. Do not include a trailing slash. 514 | */ 515 | # $settings['file_public_base_url'] = 'http://downloads.example.com/files'; 516 | 517 | /** 518 | * Public file path: 519 | * 520 | * A local file system path where public files will be stored. This directory 521 | * must exist and be writable by Drupal. This directory must be relative to 522 | * the Drupal installation directory and be accessible over the web. 523 | */ 524 | # $settings['file_public_path'] = 'sites/default/files'; 525 | 526 | /** 527 | * Private file path: 528 | * 529 | * A local file system path where private files will be stored. This directory 530 | * must be absolute, outside of the Drupal installation directory and not 531 | * accessible over the web. 532 | * 533 | * Note: Caches need to be cleared when this value is changed to make the 534 | * private:// stream wrapper available to the system. 535 | * 536 | * See https://www.drupal.org/documentation/modules/file for more information 537 | * about securing private files. 538 | */ 539 | # $settings['file_private_path'] = ''; 540 | 541 | /** 542 | * Temporary file path: 543 | * 544 | * A local file system path where temporary files will be stored. This directory 545 | * must be absolute, outside of the Drupal installation directory and not 546 | * accessible over the web. 547 | * 548 | * If this is not set, the default for the operating system will be used. 549 | * 550 | * @see \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory() 551 | */ 552 | # $settings['file_temp_path'] = '/tmp'; 553 | 554 | /** 555 | * Session write interval: 556 | * 557 | * Set the minimum interval between each session write to database. 558 | * For performance reasons it defaults to 180. 559 | */ 560 | # $settings['session_write_interval'] = 180; 561 | 562 | /** 563 | * String overrides: 564 | * 565 | * To override specific strings on your site with or without enabling the Locale 566 | * module, add an entry to this list. This functionality allows you to change 567 | * a small number of your site's default English language interface strings. 568 | * 569 | * Remove the leading hash signs to enable. 570 | * 571 | * The "en" part of the variable name, is dynamic and can be any langcode of 572 | * any added language. (eg locale_custom_strings_de for german). 573 | */ 574 | # $settings['locale_custom_strings_en'][''] = [ 575 | # 'forum' => 'Discussion board', 576 | # '@count min' => '@count minutes', 577 | # ]; 578 | 579 | /** 580 | * A custom theme for the offline page: 581 | * 582 | * This applies when the site is explicitly set to maintenance mode through the 583 | * administration page or when the database is inactive due to an error. 584 | * The template file should also be copied into the theme. It is located inside 585 | * 'core/modules/system/templates/maintenance-page.html.twig'. 586 | * 587 | * Note: This setting does not apply to installation and update pages. 588 | */ 589 | # $settings['maintenance_theme'] = 'bartik'; 590 | 591 | /** 592 | * PHP settings: 593 | * 594 | * To see what PHP settings are possible, including whether they can be set at 595 | * runtime (by using ini_set()), read the PHP documentation: 596 | * http://php.net/manual/ini.list.php 597 | * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime 598 | * settings and the .htaccess file for non-runtime settings. 599 | * Settings defined there should not be duplicated here so as to avoid conflict 600 | * issues. 601 | */ 602 | 603 | /** 604 | * If you encounter a situation where users post a large amount of text, and 605 | * the result is stripped out upon viewing but can still be edited, Drupal's 606 | * output filter may not have sufficient memory to process it. If you 607 | * experience this issue, you may wish to uncomment the following two lines 608 | * and increase the limits of these variables. For more information, see 609 | * http://php.net/manual/pcre.configuration.php. 610 | */ 611 | # ini_set('pcre.backtrack_limit', 200000); 612 | # ini_set('pcre.recursion_limit', 200000); 613 | 614 | /** 615 | * Add Permissions-Policy header to disable Google FLoC. 616 | * 617 | * By default, Drupal sends the 'Permissions-Policy: interest-cohort=()' header 618 | * to disable Google's Federated Learning of Cohorts feature, introduced in 619 | * Chrome 89. 620 | * 621 | * See https://en.wikipedia.org/wiki/Federated_Learning_of_Cohorts for more 622 | * information about FLoC. 623 | * 624 | * If you don't wish to disable FLoC in Chrome, you can set this value 625 | * to FALSE. 626 | */ 627 | # $settings['block_interest_cohort'] = TRUE; 628 | 629 | /** 630 | * Configuration overrides. 631 | * 632 | * To globally override specific configuration values for this site, 633 | * set them here. You usually don't need to use this feature. This is 634 | * useful in a configuration file for a vhost or directory, rather than 635 | * the default settings.php. 636 | * 637 | * Note that any values you provide in these variable overrides will not be 638 | * viewable from the Drupal administration interface. The administration 639 | * interface displays the values stored in configuration so that you can stage 640 | * changes to other environments that don't have the overrides. 641 | * 642 | * There are particular configuration values that are risky to override. For 643 | * example, overriding the list of installed modules in 'core.extension' is not 644 | * supported as module install or uninstall has not occurred. Other examples 645 | * include field storage configuration, because it has effects on database 646 | * structure, and 'core.menu.static_menu_link_overrides' since this is cached in 647 | * a way that is not config override aware. Also, note that changing 648 | * configuration values in settings.php will not fire any of the configuration 649 | * change events. 650 | */ 651 | # $config['system.site']['name'] = 'My Drupal site'; 652 | # $config['user.settings']['anonymous'] = 'Visitor'; 653 | 654 | /** 655 | * Fast 404 pages: 656 | * 657 | * Drupal can generate fully themed 404 pages. However, some of these responses 658 | * are for images or other resource files that are not displayed to the user. 659 | * This can waste bandwidth, and also generate server load. 660 | * 661 | * The options below return a simple, fast 404 page for URLs matching a 662 | * specific pattern: 663 | * - $config['system.performance']['fast_404']['exclude_paths']: A regular 664 | * expression to match paths to exclude, such as images generated by image 665 | * styles, or dynamically-resized images. The default pattern provided below 666 | * also excludes the private file system. If you need to add more paths, you 667 | * can add '|path' to the expression. 668 | * - $config['system.performance']['fast_404']['paths']: A regular expression to 669 | * match paths that should return a simple 404 page, rather than the fully 670 | * themed 404 page. If you don't have any aliases ending in htm or html you 671 | * can add '|s?html?' to the expression. 672 | * - $config['system.performance']['fast_404']['html']: The html to return for 673 | * simple 404 pages. 674 | * 675 | * Remove the leading hash signs if you would like to alter this functionality. 676 | */ 677 | # $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//'; 678 | # $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i'; 679 | # $config['system.performance']['fast_404']['html'] = 'The requested URL "@path" was not found on this server.
'; 680 | 681 | /** 682 | * Load services definition file. 683 | */ 684 | $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; 685 | 686 | /** 687 | * Override the default service container class. 688 | * 689 | * This is useful for example to trace the service container for performance 690 | * tracking purposes, for testing a service container with an error condition or 691 | * to test a service container that throws an exception. 692 | */ 693 | # $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; 694 | 695 | /** 696 | * Override the default yaml parser class. 697 | * 698 | * Provide a fully qualified class name here if you would like to provide an 699 | * alternate implementation YAML parser. The class must implement the 700 | * \Drupal\Component\Serialization\SerializationInterface interface. 701 | */ 702 | # $settings['yaml_parser_class'] = NULL; 703 | 704 | /** 705 | * Trusted host configuration. 706 | * 707 | * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host 708 | * header spoofing. 709 | * 710 | * To enable the trusted host mechanism, you enable your allowable hosts 711 | * in $settings['trusted_host_patterns']. This should be an array of regular 712 | * expression patterns, without delimiters, representing the hosts you would 713 | * like to allow. 714 | * 715 | * For example: 716 | * @code 717 | * $settings['trusted_host_patterns'] = [ 718 | * '^www\.example\.com$', 719 | * ]; 720 | * @endcode 721 | * will allow the site to only run from www.example.com. 722 | * 723 | * If you are running multisite, or if you are running your site from 724 | * different domain names (eg, you don't redirect http://www.example.com to 725 | * http://example.com), you should specify all of the host patterns that are 726 | * allowed by your site. 727 | * 728 | * For example: 729 | * @code 730 | * $settings['trusted_host_patterns'] = [ 731 | * '^example\.com$', 732 | * '^.+\.example\.com$', 733 | * '^example\.org$', 734 | * '^.+\.example\.org$', 735 | * ]; 736 | * @endcode 737 | * will allow the site to run off of all variants of example.com and 738 | * example.org, with all subdomains included. 739 | */ 740 | 741 | /** 742 | * The default list of directories that will be ignored by Drupal's file API. 743 | * 744 | * By default ignore node_modules and bower_components folders to avoid issues 745 | * with common frontend tools and recursive scanning of directories looking for 746 | * extensions. 747 | * 748 | * @see \Drupal\Core\File\FileSystemInterface::scanDirectory() 749 | * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() 750 | */ 751 | $settings['file_scan_ignore_directories'] = [ 752 | 'node_modules', 753 | 'bower_components', 754 | ]; 755 | 756 | /** 757 | * The default number of entities to update in a batch process. 758 | * 759 | * This is used by update and post-update functions that need to go through and 760 | * change all the entities on a site, so it is useful to increase this number 761 | * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a 762 | * larger number of entities to be processed in a single batch run. 763 | */ 764 | $settings['entity_update_batch_size'] = 50; 765 | 766 | /** 767 | * Entity update backup. 768 | * 769 | * This is used to inform the entity storage handler that the backup tables as 770 | * well as the original entity type and field storage definitions should be 771 | * retained after a successful entity update process. 772 | */ 773 | $settings['entity_update_backup'] = TRUE; 774 | 775 | /** 776 | * Node migration type. 777 | * 778 | * This is used to force the migration system to use the classic node migrations 779 | * instead of the default complete node migrations. The migration system will 780 | * use the classic node migration only if there are existing migrate_map tables 781 | * for the classic node migrations and they contain data. These tables may not 782 | * exist if you are developing custom migrations and do not want to use the 783 | * complete node migrations. Set this to TRUE to force the use of the classic 784 | * node migrations. 785 | */ 786 | $settings['migrate_node_migrate_type_classic'] = FALSE; 787 | 788 | /** 789 | * Load local development override configuration, if available. 790 | * 791 | * Create a settings.local.php file to override variables on secondary (staging, 792 | * development, etc.) installations of this site. 793 | * 794 | * Typical uses of settings.local.php include: 795 | * - Disabling caching. 796 | * - Disabling JavaScript/CSS compression. 797 | * - Rerouting outgoing emails. 798 | * 799 | * Keep this code block at the end of this file to take full effect. 800 | */ 801 | # 802 | # if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { 803 | # include $app_root . '/' . $site_path . '/settings.local.php'; 804 | # } 805 | # 806 | include $app_root . '/' . $site_path . '/settings.lando.php'; 807 | 808 | $settings['config_sync_directory'] = '../config/sync'; 809 | --------------------------------------------------------------------------------