У меня возникли некоторые проблемы с перенаправлениями .htaccess.
Мне нужна ситуация, когда (не www) domain.tld перенаправляется на www.domain.tld.И я хочу переписать аргументы, чтобы пропустить index.php, сделав запрос для / foo, перейдите в index.php / foo.
Исходная ситуация
Сначала у меня были эти правила
RewriteCond %{HTTP_HOST} ^domain\.tld [NC]
RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_\ /:-]*)$ index.php [L]
И это сработало.В основном.Что не сработало, так это то, что в PHP $ _SERVER ['PATH_INFO'] оставалось пустым, и мне не нравился белый список символов.
Изменить для PATH_INFO и принять больше
Поэтому я изменилпоследняя строка в этом:
RewriteRule ^(.*)$ index.php/$1 [L]
Это исправило PATH_INFO и ограниченные символы.Однако недавно я заметил, что это вызвало перенаправление без www на www.с треском проваливается .. При переходе к домену без www Apache говорит
Moved Permanently
The document has moved here.
Где «здесь» связано с тем же, что я набрал (non-www domain.tld) и, таким образом, не может обслуживатьuser.
Продолжение поиска ..
Я нашел много вопросов и ответов здесь и в других местах или тему перенаправлений не-www, но, похоже, что-то не получается.Например:
RewriteCond %{HTTP_HOST} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
Это не так много.Ничего не было перенаправлено, хотя веб-сайт обслуживался не по адресу www.
Кто-нибудь знает, что я делаю неправильно, или есть решение для этого беспорядка?:)
(Желательно, чтобы перенаправление без www было глобальным. Чтобы мне не приходилось каждый раз менять фактическое доменное имя.)