Htaccess не WWW и полоса index.php в хорошем смысле - PullRequest
0 голосов
/ 09 октября 2010

У меня возникли некоторые проблемы с перенаправлениями .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 было глобальным. Чтобы мне не приходилось каждый раз менять фактическое доменное имя.)

1 Ответ

0 голосов
/ 09 октября 2010

Полагаю, вы просто пропускаете флаг L , чтобы завершить процесс перезаписи:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

И не забудьте поставить это правило перед теми правилами, которые просто вызывают внутреннюю перезапись.

...