Мод переписать полный befuzzlement [закрыто]
-
05-07-2019 - |
Вопрос
Вот мой файл .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