Вопрос

Вот мой файл .htaccess

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteRule subpage\?sid /index.php [R=301,L,NC]

Мой запрос: http://example.com/subpage?sid

Он продолжает возвращать 404 Not Found, а не перенаправлять на index.php

Я пытался не избежать? и изменив запрос на http://example.com/subpage\?sid

Я пробовал множество вещей, чтобы попытаться заставить это работать, но теперь поставлен в тупик.

Это было полезно?

Решение

QUERY_STRING не является частью URI. Из документации по RewriteRule :

  

Примечание. Строка запроса

     

Pattern не будет сопоставлен со строкой запроса. Вместо этого вы должны использовать RewriteCond с переменной % {QUERY_STRING} .

Как сказано в документе, вам нужно использовать RewriteCond, что-то вроде:

RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]

Если% {QUERY_STRING} действительно не подходит, попробуйте:

# Apache is supposed to use PCRE, but doesn't seem to like "\\s"
RewriteCond %{THE_REQUEST} subpage?sid[^!-~] [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]

Кроме того, вам почти никогда не нужен RewriteBase, поскольку вы его используете (" RewriteBase / "). Прокомментируйте строку и проверьте ее, чтобы убедиться, но вы, вероятно, обнаружите, что можете удалить ее без каких-либо проблем.

Другие советы

Может быть, вам нужно проверить параметр VirtualHost для своего сайта и установить параметр AllowOverride для соответствующего каталога?

<Directory /var/www/vhosts/some_host>
     ....
     AllowOverride All
</Directory>

Подробнее об apa AllowOverride

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top