3

I have a subdomain:

https://blog.example.com/

I forcibly redirects to subdirectory:

https://www.example.com/blog

By changing site URL and some RewriteRule on .htaccess.

Now the website and admin works fine except a small issue like when I tried to click save button on settings page (eg: Setting > Writing ) the site redirects to main domain:

https://www.example.com/wp-admin/options-writing.php?settings-updated=true

/blog is missing in the URL and end up in to main website 404 page.

My .htaccess file looks like :

    # BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Host}i ^example\.com
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]

RewriteCond %{HTTP:X-Forwarded-Server}i !^www\.example\.com
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?[0-9]{4}/[0-9]{2}/(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]

RewriteCond %{HTTP:X-Forwarded-Server}i !^www\.example\.com
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]


RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

When click save button, console have an error message:

/wp-admin/options-general.php?settings-updated=true:1 GET https://www.example.com/wp-admin/options-general.php?settings-updated=true 404 ()

Can anybody help to figure this out?

Updated working .htaccess (according to 1st answer) :

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]
</IfModule>

My wordpress address and site address are:

WordPress Address (URL) =   /blog
Site Address (URL) = https://www.example.com/blog
  • What RewriteRule are you using in your .htaccess? Please edit your question with the rules you are using. – Ethan Jinks O'Sullivan Sep 20 '16 at 13:28
  • @EthanJinksO'Sullivan : Thanks for help. I updated the question with .htaccess content. – Muhammad Riyaz Sep 20 '16 at 13:39
0

From looking at your .htaccess, it looks like your has too many rules overlapping each other. Do the following instead:

  1. Keep a backup of your current .htaccess if you need to go back to it
  2. Delete your .htaccess form the server, WordPress should automatically create a fresh one for you
  3. Open your new .htaccess file and add the following between the <IfModule mod_rewrite.c> tag:

.

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

Your .htaccess should then look like the following:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# Custom rewrite
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]
</IfModule>
# END WordPress
  • When I delete my current .htaacess and tried with yours, then I open website shows too many redirects. So I replace old .htaccess file. I should have to write rules for 1) non https -> https 2) subdomain -> sub directory . I noticed one thing that when I open console in wp-admin page I found an error : Uncaught SecurityError: Failed to execute 'replaceState' on 'History': A history state object with URL 'blog.example.com/wp-admin/index.php' cannot be created in a document with origin 'example.com' and URL 'example.com/blog/wp-admin/index.php'. – Muhammad Riyaz Sep 21 '16 at 6:34
  • My updated .httaccess: # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /blog/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L] RewriteCond %{HTTP:X-Forwarded-Host}i ^example\.com RewriteCond %{HTTP_HOST} ^blog\.example\.com$ RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC] RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC] </IfModule> # END WordPress – Muhammad Riyaz Sep 21 '16 at 6:39
  • When I dig more in to the console error, found the line causing error is: window.history.replaceState( null, null, document.getElementById( 'wp-admin-canonical' ).href + window.location.hash ); – Muhammad Riyaz Sep 21 '16 at 7:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.