From d6a44862cad20b61a4590eb1583444aef050c933 Mon Sep 17 00:00:00 2001 From: Jonathan Hodgson Date: Thu, 8 Jun 2017 10:55:10 +0100 Subject: [PATCH] Add gen-htaccess --- bin/gen-htaccess | 353 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100755 bin/gen-htaccess diff --git a/bin/gen-htaccess b/bin/gen-htaccess new file mode 100755 index 00000000..6ee4b71c --- /dev/null +++ b/bin/gen-htaccess @@ -0,0 +1,353 @@ +#!/bin/bash + +DIR="$PWD" +# +#while test $# -gt 0; do +# case "$1" in +# --uploads) +# shift +# uploads=$1 +# if [ ${uploads:0:1} == "-" ]; then +# uploads="" +# else +# shift +# fi +# ;; +# -h|--help) +# echo -e "htaccess Generator" +# echo -e "This generates an htaccess file" +# echo -e "It adds 301 redirects to the new locations of wp-includes and wp-admin" +# echo -e "It also sets up 301 redirects to or from the www version of the site" +# echo -e "For use on dev or local sites, you can specify a url to have for the wp-uploads" +# echo -e " " +# echo -e "Options" +# echo -e "-h, --help \t\t\t Show this help" +# echo -e "--uploads [url] \t\t\t The URL to redirect uploads to" +# echo -e "--with-www \t\t\t Indicate that the primary site should have www" +# echo -e "--without-www \t\t\t Indicate that the primary site shouldn't have www" +# echo -e "--domain [domain]\t\t\t The domain without www or http etc." +# exit 0 +# ;; +# -a|--auto) +# defaults=true +# shift +# ;; +# --with-www) +# www="with" +# shift +# ;; +# --without-www) +# www="without" +# shift +# ;; +# --domain) +# shift +# domain=$1 +# if [ ${domain:0:1} == "-" ]; then +# domain="" +# else +# shift +# fi +# ;; +# *) +# echo -e "You entered something that wasn't help or salt" +# shift +# ;; +# esac +# +#done + +if [ -f "$DIR/.htaccess" ]; then + echo -e "The file .htaccess already exists." + echo -e "What do you want to do? [ b=Create Backup | o=Overwrite | a=Abort] \c" + read choice + choice=$(echo -e $choice | tr '[:upper:]' '[:lower:]' | head -c 1) + if [[ "$choice" == "b" ]]; then + name=".htaccess.backup$(date +'%y:%m:%d:%T')" + mv "$DIR/.htaccess" "$DIR/$name" + echo -e "Would you like to add this new file to .gitignore? [Y/n] \c" + read input + input=$(echo -e $input | tr '[:upper:]' '[:lower:]' | head -c 1) + if [[ $input != 'n' ]];then + echo "$name" >> .gitignore + fi + + fi + if [[ "$choice" == "a" ]]; then + echo -e "Aborted by user" + return 1 + fi + rm "$DIR/.htaccess" +fi + + +echo -e "Will you be running wordpress from a wp subdirectory? [Y/n] \c" +read input +input=$(echo -e $input | tr '[:upper:]' '[:lower:]' | head -c 1) +if [[ $input != 'n' ]]; then + subdirectory="true" +else + subdirectory="false" +fi + +# Little hack to make any 404 urls set in .htaccess use the wp 404 page +echo 'ErrorDocument 404 /404/' > "$DIR/.htaccess" + +# If wordpress is installed in a sub-directory, add redirects +if [[ "subdirectory" == "true" ]]; then + echo 'RedirectMatch 301 ^/wp-admin/(.*)$ /wp/wp-admin/$1' >> "$DIR/.htaccess" + echo 'RedirectMatch 301 ^/wp-includes/(.*)$ /wp/wp-includes/$1' >> "$DIR/.htaccess" +fi + +#This makes sure all git folders and files are inaccessible +echo 'RedirectMatch 404 /\.git' >> "$DIR/.htaccess" + +#This makes sure aquariusGo is not accessible +echo 'RedirectMatch 404 ^/aquariusGo' >> "$DIR/.htaccess" + +#This makes sure htaccess is not accessible +echo 'RedirectMatch 404 ^/\.htaccess' >> "$DIR/.htaccess" + +echo -e "Would you like to add cache, expire and gzip rules? [Y/n] \c" +read input +input=$(echo -e $input | tr '[:upper:]' '[:lower:]' | head -c 1) +if [[ $input != 'n' ]]; then + cacheRules="true" +else + cacheRules="false" +fi +if [[ "$cacheRules" == "true" ]]; then + echo '# Add Browser Cache expires rules' >> "$DIR/.htaccess" + echo '' >> "$DIR/.htaccess" + echo ' AddType text/css .css' >> "$DIR/.htaccess" + echo ' AddType text/x-component .htc' >> "$DIR/.htaccess" + echo ' AddType application/x-javascript .js' >> "$DIR/.htaccess" + echo ' AddType application/javascript .js2' >> "$DIR/.htaccess" + echo ' AddType text/javascript .js3' >> "$DIR/.htaccess" + echo ' AddType text/x-js .js4' >> "$DIR/.htaccess" + echo ' AddType text/html .html .htm' >> "$DIR/.htaccess" + echo ' AddType text/richtext .rtf .rtx' >> "$DIR/.htaccess" + echo ' AddType image/svg+xml .svg .svgz' >> "$DIR/.htaccess" + echo ' AddType text/plain .txt' >> "$DIR/.htaccess" + echo ' AddType text/xsd .xsd' >> "$DIR/.htaccess" + echo ' AddType text/xsl .xsl' >> "$DIR/.htaccess" + echo ' AddType text/xml .xml' >> "$DIR/.htaccess" + echo ' AddType video/asf .asf .asx .wax .wmv .wmx' >> "$DIR/.htaccess" + echo ' AddType video/avi .avi' >> "$DIR/.htaccess" + echo ' AddType image/bmp .bmp' >> "$DIR/.htaccess" + echo ' AddType application/java .class' >> "$DIR/.htaccess" + echo ' AddType video/divx .divx' >> "$DIR/.htaccess" + echo ' AddType application/msword .doc .docx' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-fontobject .eot' >> "$DIR/.htaccess" + echo ' AddType application/x-msdownload .exe' >> "$DIR/.htaccess" + echo ' AddType image/gif .gif' >> "$DIR/.htaccess" + echo ' AddType application/x-gzip .gz .gzip' >> "$DIR/.htaccess" + echo ' AddType image/x-icon .ico' >> "$DIR/.htaccess" + echo ' AddType image/jpeg .jpg .jpeg .jpe' >> "$DIR/.htaccess" + echo ' AddType application/json .json' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-access .mdb' >> "$DIR/.htaccess" + echo ' AddType audio/midi .mid .midi' >> "$DIR/.htaccess" + echo ' AddType video/quicktime .mov .qt' >> "$DIR/.htaccess" + echo ' AddType audio/mpeg .mp3 .m4a' >> "$DIR/.htaccess" + echo ' AddType video/mp4 .mp4 .m4v' >> "$DIR/.htaccess" + echo ' AddType video/mpeg .mpeg .mpg .mpe' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-project .mpp' >> "$DIR/.htaccess" + echo ' AddType application/x-font-otf .otf' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-opentype ._otf' >> "$DIR/.htaccess" + echo ' AddType application/vnd.oasis.opendocument.database .odb' >> "$DIR/.htaccess" + echo ' AddType application/vnd.oasis.opendocument.chart .odc' >> "$DIR/.htaccess" + echo ' AddType application/vnd.oasis.opendocument.formula .odf' >> "$DIR/.htaccess" + echo ' AddType application/vnd.oasis.opendocument.graphics .odg' >> "$DIR/.htaccess" + echo ' AddType application/vnd.oasis.opendocument.presentation .odp' >> "$DIR/.htaccess" + echo ' AddType application/vnd.oasis.opendocument.spreadsheet .ods' >> "$DIR/.htaccess" + echo ' AddType application/vnd.oasis.opendocument.text .odt' >> "$DIR/.htaccess" + echo ' AddType audio/ogg .ogg' >> "$DIR/.htaccess" + echo ' AddType application/pdf .pdf' >> "$DIR/.htaccess" + echo ' AddType image/png .png' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-powerpoint .pot .pps .ppt .pptx' >> "$DIR/.htaccess" + echo ' AddType audio/x-realaudio .ra .ram' >> "$DIR/.htaccess" + echo ' AddType application/x-shockwave-flash .swf' >> "$DIR/.htaccess" + echo ' AddType application/x-tar .tar' >> "$DIR/.htaccess" + echo ' AddType image/tiff .tif .tiff' >> "$DIR/.htaccess" + echo ' AddType application/x-font-ttf .ttf .ttc' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-opentype ._ttf' >> "$DIR/.htaccess" + echo ' AddType audio/wav .wav' >> "$DIR/.htaccess" + echo ' AddType audio/wma .wma' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-write .wri' >> "$DIR/.htaccess" + echo ' AddType application/font-woff .woff' >> "$DIR/.htaccess" + echo ' AddType application/font-woff2 .woff2' >> "$DIR/.htaccess" + echo ' AddType application/vnd.ms-excel .xla .xls .xlsx .xlt .xlw' >> "$DIR/.htaccess" + echo ' AddType application/zip .zip' >> "$DIR/.htaccess" + echo '' >> "$DIR/.htaccess" + echo '' >> "$DIR/.htaccess" + echo ' ExpiresActive On' >> "$DIR/.htaccess" + echo ' ExpiresByType text/css A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType text/x-component A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/x-javascript A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/javascript A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType text/javascript A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType text/x-js A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType text/html A3600' >> "$DIR/.htaccess" + echo ' ExpiresByType text/richtext A3600' >> "$DIR/.htaccess" + echo ' ExpiresByType image/svg+xml A3600' >> "$DIR/.htaccess" + echo ' ExpiresByType text/plain A3600' >> "$DIR/.htaccess" + echo ' ExpiresByType text/xsd A3600' >> "$DIR/.htaccess" + echo ' ExpiresByType text/xsl A3600' >> "$DIR/.htaccess" + echo ' ExpiresByType text/xml A3600' >> "$DIR/.htaccess" + echo ' ExpiresByType video/asf A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType video/avi A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType image/bmp A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/java A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType video/divx A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/msword A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-fontobject A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/x-msdownload A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType image/gif A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/x-gzip A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType image/x-icon A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType image/jpeg A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/json A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-access A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType audio/midi A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType video/quicktime A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType audio/mpeg A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType video/mp4 A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType video/mpeg A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-project A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/x-font-otf A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-opentype A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.oasis.opendocument.database A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.oasis.opendocument.chart A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.oasis.opendocument.formula A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.oasis.opendocument.graphics A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.oasis.opendocument.presentation A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.oasis.opendocument.spreadsheet A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.oasis.opendocument.text A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType audio/ogg A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/pdf A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType image/png A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-powerpoint A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType audio/x-realaudio A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType image/svg+xml A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/x-shockwave-flash A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/x-tar A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType image/tiff A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/x-font-ttf A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-opentype A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType audio/wav A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType audio/wma A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-write A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/font-woff A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/font-woff2 A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/vnd.ms-excel A31536000' >> "$DIR/.htaccess" + echo ' ExpiresByType application/zip A31536000' >> "$DIR/.htaccess" + echo '' >> "$DIR/.htaccess" + + + #Add Gzip Compression + echo '' >> "$DIR/.htaccess" + echo ' # force deflate for mangled headers' >> "$DIR/.htaccess" + echo ' # developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo ' SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding' >> "$DIR/.htaccess" + echo ' RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo '' >> "$DIR/.htaccess" + echo ' # HTML, TXT, CSS, JavaScript, JSON, XML, HTC:' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo ' FilterDeclare COMPRESS' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf' >> "$DIR/.htaccess" + echo ' FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype' >> "$DIR/.htaccess" + echo ' FilterChain COMPRESS' >> "$DIR/.htaccess" + echo ' FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo '' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo ' # Legacy versions of Apache' >> "$DIR/.htaccess" + echo ' AddOutputFilterByType DEFLATE text/html text/plain text/css application/json' >> "$DIR/.htaccess" + echo ' AddOutputFilterByType DEFLATE application/javascript' >> "$DIR/.htaccess" + echo ' AddOutputFilterByType DEFLATE text/xml application/xml text/x-component' >> "$DIR/.htaccess" + echo ' AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml ' >> "$DIR/.htaccess" + echo ' AddOutputFilterByType DEFLATE application/atom+xml' >> "$DIR/.htaccess" + echo ' AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject ' >> "$DIR/.htaccess" + echo ' AddOutputFilterByType DEFLATE application/x-font-ttf font/opentype' >> "$DIR/.htaccess" + echo ' ' >> "$DIR/.htaccess" + echo '' >> "$DIR/.htaccess" +fi + + +echo '' >> "$DIR/.htaccess" +echo 'RewriteEngine On' >> "$DIR/.htaccess" +echo 'RewriteBase /' >> "$DIR/.htaccess" +if [ ! "$www" ]; then + if [ "$defaults" == "true" ]; then + www="without" + echo -e "Default is to not use www" + echo -e "To change, run with flag --with-www" + echo -e "For more options, run with flag --help\n" + else + echo -e "Would you like the primary version of the site to use wwws? [y/N] \c" + read input + input=$(echo -e $input | tr '[:upper:]' '[:lower:]' | head -c 1) + if [[ $input != 'y' ]]; then + www="without" + else + www="with" + fi + fi +fi +if [ ! "$domain" ]; then + echo -e "Please enter the domain without wwws, http or trailing slash \c" + read domain +fi +if [[ "$www" == "with" ]]; then + echo "#Primary Site will have wwws" >> "$DIR/.htaccess" + echo "RewriteCond %{HTTP_HOST} ^$domain [NC]" >> "$DIR/.htaccess" + echo "RewriteRule ^(.*)$ http://www.$domain/\$1 [L,R=301,NC]" >> "$DIR/.htaccess" +else + echo "#Primary site will not have wwws" >> "$DIR/.htaccess" + echo "RewriteCond %{HTTP_HOST} ^www.$domain [NC]" >> "$DIR/.htaccess" + echo "RewriteRule ^(.*)$ http://$domain/\$1 [L,R=301]" >> "$DIR/.htaccess" +fi + +if [ ! "$uploads" ]; then + if [ "$defaults" == "true" ]; then + echo -e "By default, the uploads folder will be used as normal" + echo -e "To change, run with flag uploads [url]" + echo -e "For more options, run with flag --help\n" + else + echo "Aquarius Go now has the ability to redirect an uploads folder to a different" + echo "This is usefull for dev sites or local copies of sites" + echo "In order to use it, enter the url with the http(s):// and a trailing slash" + echo "Don't enter anything if you want to use the default location" + echo -e "URL: \c" + read uploads + fi +fi +if [ "$uploads" ]; then + echo 'RewriteCond %{REQUEST_FILENAME} !-d' >> "$DIR/.htaccess" + echo 'RewriteCond %{REQUEST_FILENAME} !-f' >> "$DIR/.htaccess" + echo 'RewriteRule wp-content/uploads/(.*) \' >> "$DIR/.htaccess" + echo " $uploads\$1 [NC,L]" >> "$DIR/.htaccess" +fi +echo 'RewriteRule ^index\.php$ - [L]' >> "$DIR/.htaccess" +echo 'RewriteCond %{REQUEST_FILENAME} !-f' >> "$DIR/.htaccess" +echo 'RewriteCond %{REQUEST_FILENAME} !-d' >> "$DIR/.htaccess" +echo 'RewriteRule . /index.php [L]' >> "$DIR/.htaccess" +echo '' >> "$DIR/.htaccess" +