htaccess RewriteRule приводит к 404 ответам

Нет никакого способа добавить контроллер домена 2003 к домену NT4; Ваша единственная опция состоит в том, чтобы выполнить оперативное обновление NT4 PDC: это преобразует домен в Active Directory, и затем Вы сможете добавить новый DCS 2003.

Преобразование домена потребует, чтобы Вы установили надлежащую инфраструктуру DNS, которая очень важна для AD операции; это может быть автоматически сделано во время NT-> обновление 2003 года. Это также даст Вашему домену два имени вместо одного: имя NetBIOS (т.е. доменное имя NT4-стиля) останется неизменным, но новое имя DNS будет создано, обычно путем добавления некоторого суффикса к доменному имени NT4. Так, если Ваш домен назовут "MYDOMAIN", то Вас попросят во время обновления предоставить имя DNS, которое могло быть чем-либо, что Вы хотите, если это - имя ни одной маркировки; "mydomain.local" или "mydomain.com" являются оба прекрасным выбором, но обычно Вы не хотите, чтобы это совпало с Вашим именем общественного достояния (если у Вас есть один), из-за потенциальных проблем DNS.

После того, как обновление выполняется, Вы закончите с рабочим доменом Active Directory, но Ваш основной контроллер домена 2003 будет сервером, который был обновлен от NT; обычно не рекомендуется поддерживать его в рабочем состоянии, поскольку это не может быть абсолютно стабильно и не будет, вероятно, иметь очень недавних аппаратных средств. Необходимо будет добавить другой DCS 2003 к домену (на этот раз с помощью DCPROMO), переместить сервис DNS и роли FSMO им, и понизить (использующий DCPROMO снова) этот сервер для надлежащего удаления его из Active Directory; необходимо будет также удалить NT4 BDCs, если у Вас будут они.

Как Вы видите, процесс не чрезмерно сложен, но требуется большой уход и внимание к деталям; также, будут требоваться некоторое полное планирование и тестирование. Но все еще настоятельно рекомендуется действовать этот путь, потому что миграция Вашего домена к новому с помощью Активного Инструмента Миграции Directoy намного более сложна и подвержена ошибкам.

Для получения дополнительной информации обратитесь к статьям Technet, которые другие люди связали в их ответах.

1
задан 25 May 2019 в 00:57
2 ответа

Попробуйте ] ^ ([^ /] +) /? $ и посмотрите, работает ли оно должным образом.

0
ответ дан 4 December 2019 в 09:51

Такое поведение типично для конфликта с MuiltiViews . Вы должны отключить MultiViews в верхней части файла .htaccess :

Options -MultiViews

Это объясняет, почему / login без завершающего / успешно обслуживает файл -ваше RewriteRule полностью игнорируется в этом сценарии.

Если MultiViews включен, при запросе / login / mod_negotiation создает макет карты перезаписи и выдает внутренний подзапрос для / login.php до того, как mod_rewrite обработает URL. Информация о пути (завершающая / ) добавляется обратно и становится /login.php/ . Он передается для дальнейшей обработки и соответствует вашему слишком общему ( ^ (. *) / $ ) шаблону RewriteRule , что приводит к внутренней перезаписи в / login.php.php / и т. д. В зависимости от вашей конфигурации это может привести к 403 (так как это может привести к некорректному запросу) или 404 (как вы, кажется, видите).

Отключение MultiViews в одиночку (как упоминалось выше) решит эту проблему. Однако вам также следует подумать о том, чтобы сделать ваш шаблон RewriteRule более ограничительным. Например, чтобы избежать сопоставления URL-адресов, которые уже содержат точку (т. Е. Имеют расширение файла):

RewriteRule ^([^.]+)/$ $1.php [L]

Простое ограничение регулярного выражения может даже «исправить» ошибку. Однако это будут MultiViews, выполняющие внутренний подзапрос, а не mod_rewrite (ваше правило будет просто пропущено).

как / login / или / login (с завершающим символом или без него). / )

Чтобы правило работало с / login / или / login (то есть с косой чертой в конце или без), вам потребуется чтобы сделать конечную косую черту необязательной, т.е. /? . Но вам также может потребоваться либо сделать предыдущий шаблон нежадным, либо включить косую черту в класс отрицательных символов, чтобы избежать захвата конечной косой черты в обратной ссылке.

Например, либо:

RewriteRule ^([^.]+?)/?$ $1.php [L]

, либо

RewriteRule ^([^./]+)/?$ $1.php [L]

] Но второе правило будет работать только с URL-адресами, содержащими один сегмент пути, тогда как первое будет работать с URL-адресом в форме / foo / bar / login .

В сводке

Options -MultiViews

RewriteEngine On
RewriteRule ^([^.]+?)/?$ $1.php [L]
0
ответ дан 4 December 2019 в 09:51

Теги

Похожие вопросы