Если для разработки вы пользуетесь Laravel Homestead, может возникнуть ситуация, когда стандартных правил в конфиге nginx может быть не достаточно.
К счастью, в Homestead достаточно просто добавить свою собственную конфигурацию для сайта.
Вот инструкция:
Идём в папку Homestead/scripts/site-types
Тут находятся конфиги для различных типов сайтов — Laravel, WordPress, Modx, Symfony и т.п.
Можно брать любой понравившийся и править под себя.
Чтобы использовать конфиг для определённого сайта, достаточно добавить имя конфига в Homestead.yaml
1 2 3 |
- map: wp.dev to: /home/vagrant/wp.dev type: wordpress |
Для WordPress конфиг такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
#!/usr/bin/env bash declare -A params=$6 # Create an associative array declare -A headers=${9} # Create an associative array declare -A rewrites=${10} # Create an associative array paramsTXT="" if [ -n "$6" ]; then for element in "${!params[@]}" do paramsTXT="${paramsTXT} fastcgi_param ${element} ${params[$element]};" done fi headersTXT="" if [ -n "${9}" ]; then for element in "${!headers[@]}" do headersTXT="${headersTXT} add_header ${element} ${headers[$element]};" done fi rewritesTXT="" if [ -n "${10}" ]; then for element in "${!rewrites[@]}" do rewritesTXT="${rewritesTXT} location ~ ${element} { if (!-f \$request_filename) { return 301 ${rewrites[$element]}; } }" done fi if [ "$7" = "true" ] then configureXhgui=" location /xhgui { try_files \$uri \$uri/ /xhgui/index.php?\$args; } " else configureXhgui="" fi block="server { listen ${3:-80}; listen ${4:-443} ssl http2; server_name .$1; root \"$2\"; index index.php index.html index.htm; charset utf-8; $rewritesTXT location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { allow all; access_log off; log_not_found off; } location ~ /.*\.(jpg|jpeg|png|js|css)$ { try_files \$uri =404; } location / { try_files \$uri \$uri/ /index.php?\$query_string; } if (!-e \$request_filename) { # Add trailing slash to */wp-admin requests. rewrite /wp-admin$ \$scheme://\$host\$uri/ permanent; # WordPress in a subdirectory rewrite rules rewrite ^/([_0-9a-zA-Z-]+/)?(wp-.*|xmlrpc.php) /wp/\$2 break; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; fastcgi_pass unix:/var/run/php/php$5-fpm.sock; fastcgi_intercept_errors on; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; } $configureXhgui access_log off; error_log /var/log/nginx/$1-error.log error; sendfile off; location ~ /\.ht { deny all; } ssl_certificate /etc/nginx/ssl/$1.crt; ssl_certificate_key /etc/nginx/ssl/$1.key; } " echo "$block" > "/etc/nginx/sites-available/$1" ln -fs "/etc/nginx/sites-available/$1" "/etc/nginx/sites-enabled/$1" # Additional constants to define in wp-config.php wpConfigSearchStr="\$table_prefix = 'wp_';" wpConfigReplaceStr="\$table_prefix = 'wp_';\\n\ \\n\ // Define the default HOME/SITEURL constants and set them to our root domain\\n\ if ( ! defined( 'WP_HOME' ) ) {\\n\ define( 'WP_HOME', 'http://$1' );\\n\ }\\n\ if ( ! defined( 'WP_SITEURL' ) ) {\\n\ define( 'WP_SITEURL', WP_HOME );\\n\ }\\n\ \\n\ if ( ! defined( 'WP_CONTENT_DIR' ) ) {\\n\ define( 'WP_CONTENT_DIR', __DIR__ . '/wp-content' );\\n\ }\\n\ if ( ! defined( 'WP_CONTENT_URL' ) ) {\\n\ define( 'WP_CONTENT_URL', WP_HOME . '/wp-content' );\\n\ }\\n\ " # If wp-cli is installed, try and update it if [ -f /usr/local/bin/wp ] then wp cli update --stable --yes fi # If WP is not installed then download it if [ -d "$2/wp" ] then echo "WordPress is already installed." else sudo -i -u vagrant -- mkdir "$2/wp" sudo -i -u vagrant -- wp core download --path="$2/wp" --version=latest sudo -i -u vagrant -- cp -R $2/wp/wp-content $2/wp-content sudo -i -u vagrant -- cp $2/wp/index.php $2/index.php sudo -i -u vagrant -- sed -i "s|/wp-blog-header|/wp/wp-blog-header|g" $2/index.php sudo -i -u vagrant -- echo "path: $2/wp/" > $2/wp-cli.yml sudo -i -u vagrant -- wp config create --path=$2/wp/ --dbname=${1/./_} --dbuser=homestead --dbpass=secret --dbcollate=utf8_general_ci sudo -i -u vagrant -- mv $2/wp/wp-config.php $2/wp-config.php sudo -i -u vagrant -- sed -i 's|'"$wpConfigSearchStr"'|'"$wpConfigReplaceStr"'|g' $2/wp-config.php sudo -i -u vagrant -- sed -i "s|define( 'ABSPATH', dirname( __FILE__ ) . '/' );|define( 'ABSPATH', __DIR__ . '/wp/' );|g" $2/wp-config.php echo "WordPress has been downloaded and config file has been generated, install it manually." fi |
По умолчанию данный конфиг содержит и команды для установки WordPress, и после выполнения vagrant reload --provision
будет установлен WordPress в дииректорию wp.
Если вам это не нужно, можно смело удалить этот кусок кода
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# Additional constants to define in wp-config.php wpConfigSearchStr="\$table_prefix = 'wp_';" wpConfigReplaceStr="\$table_prefix = 'wp_';\\n\ \\n\ // Define the default HOME/SITEURL constants and set them to our root domain\\n\ if ( ! defined( 'WP_HOME' ) ) {\\n\ define( 'WP_HOME', 'http://$1' );\\n\ }\\n\ if ( ! defined( 'WP_SITEURL' ) ) {\\n\ define( 'WP_SITEURL', WP_HOME );\\n\ }\\n\ \\n\ if ( ! defined( 'WP_CONTENT_DIR' ) ) {\\n\ define( 'WP_CONTENT_DIR', __DIR__ . '/wp-content' );\\n\ }\\n\ if ( ! defined( 'WP_CONTENT_URL' ) ) {\\n\ define( 'WP_CONTENT_URL', WP_HOME . '/wp-content' );\\n\ }\\n\ " # If wp-cli is installed, try and update it if [ -f /usr/local/bin/wp ] then wp cli update --stable --yes fi # If WP is not installed then download it if [ -d "$2/wp" ] then echo "WordPress is already installed." else sudo -i -u vagrant -- mkdir "$2/wp" sudo -i -u vagrant -- wp core download --path="$2/wp" --version=latest sudo -i -u vagrant -- cp -R $2/wp/wp-content $2/wp-content sudo -i -u vagrant -- cp $2/wp/index.php $2/index.php sudo -i -u vagrant -- sed -i "s|/wp-blog-header|/wp/wp-blog-header|g" $2/index.php sudo -i -u vagrant -- echo "path: $2/wp/" > $2/wp-cli.yml sudo -i -u vagrant -- wp config create --path=$2/wp/ --dbname=${1/./_} --dbuser=homestead --dbpass=secret --dbcollate=utf8_general_ci sudo -i -u vagrant -- mv $2/wp/wp-config.php $2/wp-config.php sudo -i -u vagrant -- sed -i 's|'"$wpConfigSearchStr"'|'"$wpConfigReplaceStr"'|g' $2/wp-config.php sudo -i -u vagrant -- sed -i "s|define( 'ABSPATH', dirname( __FILE__ ) . '/' );|define( 'ABSPATH', __DIR__ . '/wp/' );|g" $2/wp-config.php echo "WordPress has been downloaded and config file has been generated, install it manually." fi |
После внесения всех изменений перезагружаем Vagrant
vagrant reload --provision