Назад | Перейти на главную страницу

Почему одна из этих директив htaccess удаляет строку запроса, а другая - нет?

Я изо всех сил пытаюсь понять, почему одна из этих директив htaccess удаляет строку запроса, а другая - нет.

RewriteCond %{QUERY_STRING} p=invitations
RewriteRule ^index.php$ /Invitations? [L,R=301,QSD]

RewriteCond %{QUERY_STRING} p=corporate_invitations
RewriteRule ^index.php$ /Invitations/Corporate? [L,R=301,QSD]

Первый будет перенаправлять с URL-адреса, например /index.php?l=page_view&p=invitations и правильно переписать на / Приглашения.

Второй, если вы перейдете к /index.php?l=page_view&p=corporate_invitations вы будете перенаправлены на / Приглашения / Корпоративные? L = page_view & p = Corporate_invitations. Итак, мой вопрос: почему первый удаляет строку запроса, а второй - нет.

--Редактировать--

Поскольку я использую Apache 2.4.12, я удалил? в конце, поскольку QSD работает правильно для других линий. Я добавил больше правил, и единственное, что не может удалить строку запроса, - это Invitations / Corporate. Он выполняет перенаправление, но оставляет строку запроса на месте. Я подумал, что это может быть / в середине правила, но приглашения / вечеринка работают правильно.

Весь файл .htaccess:

Options +FollowSymlinks
RewriteEngine On

RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{QUERY_STRING} p=corporate_invitations
RewriteRule ^index.php$ /Invitations/Corporate [L,R=301,QSD]

RewriteCond %{QUERY_STRING} p=invitations
RewriteRule ^index.php$ /Invitations [L,R=301,QSD]

RewriteCond %{QUERY_STRING} p=message_in_a_bottle_gifts
RewriteRule ^index.php$ /GiftBottles [L,R=301,QSD]

RewriteCond %{QUERY_STRING} p=party_invitations
RewriteRule ^index.php$ /Invitations/Party [L,R=301,QSD]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php%{REQUEST_URI}