Файл .htaccess с неожиданным перенаправлением - PullRequest
0 голосов
/ 31 января 2020

Мой код .htaccess ниже дает неожиданные результаты. Пожалуйста, помогите мне исправить это, сославшись на ожидаемый результат против выходного результата.

<IfModule mod_rewrite.c>
Redirect /main-page https://example.com/new-main-page
Redirect /main-page/sub-page1 https://example.com/new-main-page/new-sub-page1
</IfModule>

# 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]
</IfModule>
# END WordPress

## Added as per WP-1252 ##
<IfModule mod_headers.c>
Header set X-UA-Compatible "IE=edge"
</IfModule>

Ожидаемое поведение:

Запрос 1: https://sample.com/main-page перенаправление на https://example.com/new-main-page

Запрос 2: https://sample.com/main-page/sub-page1 перенаправление на https://example.com/new-main-page/new-sub-page1

Запрос 3: https://sample.com/main-page/sub-page2 перенаправление на https://sample.com/page-not-found

Результат вывода:

Запрос 1: https://sample.com/main-page перенаправляет на https://example.com/new-main-page (ожидаемое поведение)

Запрос 2: https://sample.com/main-page/sub-page1 перенаправляет на https://example.com/new-main-page/new-sub-page1 (ожидаемое поведение)

Запрос 3: https://sample.com/main-page/sub-page2 перенаправляет на https://example.com/new-main-page/sub-page2 (неожиданное поведение. Почему?)

1 Ответ

1 голос
/ 31 января 2020

Так Redirect работает, так как ловит все, что начинается с заданной строки URI. Поэтому Redirect /main-page перенаправит все URI, которые начинаются с /main-page. Вы должны использовать RewriteRule, что позволяет использовать регулярные выражения для точного соответствия, и более того, вы уже используете это в остальной части вашего .htaccess.

Вы можете использовать:

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^main-page/?$ https://example.com/new-main-page [L,R=301,NC]
RewriteRule ^main-page/sub-page1/?$ https://example.com/new-main-page/new-sub-page1 [L,R=301,NC]

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

## Added as per WP-1252 ##
<IfModule mod_headers.c>
Header set X-UA-Compatible "IE=edge"
</IfModule>

Make обязательно очистите кеш браузера или используйте новый браузер, чтобы избежать кеша старого браузера.

...