简体   繁体   中英

301 Redirect to Incorrect URL

I inherited a live Wordpress website where 30+ pages were 301 redirected to the home page. Which is... obviously not ideal.

This is an example of what is happening:

https://www.example.com/shop -- 301 --> https://example.com

In that scenario, this is what I want to be happening:

https://www.example.com/shop --> https://www.example.com/shop

I'd consider myself a beginner at Apache. I don't typically use htaccess except for basic SSL redirects. I've been banging my head against the wall all night so any advice is welcome.

EDIT:

Caching doesn't seem to be the issue as the redirect persists in Chrome incognito. Here's my current .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

UPDATE:

This code in the wp-config file appears to be causing issues. When I comment it out, some of the URLs are no longer 301 but the page content that is loading is still the home page on every page.

define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/');
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST'] . '/');

Your file looks very similar to the WordPress default, except for a couple items. First, you have multiple RewriteBase directives. The last one wins and controls the entire .htaccess file. This should be corrected. Second, you have a redirect from http protocol to https , which is probably fine and intentional.

According to the WordPress documentation , the default WordPress .htaccess file contains:

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Working from the WordPress default file above, your file has some added lines that I'll explain.

  1. Ths is a conditional test if the mod_rewrite module is enabled. It's fine, but may be optional in your case.

     <IfModule mod_rewrite.c>
  2. The first two lines below are fine. The second instance of RewriteEngine On should be removed, and may be the source of your issue.

     RewriteEngine On RewriteRule.* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteEngine On
  3. These lines check for http protocol and redirect to https .

     RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  4. This is the end of the conditional block. It's fine, and required because you have the line in number 1 above.

     </IfModule>

Basically, your file looks correct to me, except for the second RewriteEngine On directive. If you remove that and still have issues, I don't think you have an .htaccess problem and should look for other issues in WordPress such as redirection plugins.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM