Это уже затрагивалось ниже, но я считаю, что следующий рецепт является довольно надежным решением этой проблемы:
Настроить перенаправление
Запросить страницу через ее переписанный URL
Если запрос возвращает рассматриваемую страницу, у вас правильно настроено перенаправление, если вы получаете ответ HTTP 404, значит, оно не работает.
Идея в том, что это работает практически с любым методом перенаправления. Уже упоминалось, но стоит повторить, такие трюки добавляют немало накладных расходов и лучше выполнять их один раз (установка или из панели настроек), а затем сохранять в настройках.
Некоторые детали реализации, варианты выбора и немного о том, как я пришел к этому решению:
Я вспомнил, что Drupal делал такую проверку в процессе установки, поэтому я посмотрел, как они это делают. У них был javascript на странице установки, выполняющий запрос ajax (синхронно, чтобы предотвратить проблемы параллелизма с базой данных). Это требует, чтобы пользователь, устанавливающий программное обеспечение, включил javascript, но я не думаю, что это необоснованное требование.
Однако я думаю, что использование php для запроса страницы может быть более чистым решением. Наряду с отсутствием требований к javascript, ему также требуется меньше данных для отправки туда и обратно и просто не требуется, чтобы логика действия распространялась на несколько файлов. Я не знаю, есть ли другие (не)преимущества для любого метода, но это должно заставить вас двигаться и позволить вам самостоятельно изучить альтернативные варианты.
Остается сделать еще один выбор: тестировать в тестовой среде или на обычном сайте. Что делает Drupal, так это то, что перенаправление всегда включено (например, в случае с apache файл .htaccess, который действительно перенаправляет, просто является частью загрузки Drupal), но пишет причудливые URL-адреса только в том случае, если перенаправление включено в настройки. Недостатком этого является то, что для определения типа перенаправления требуется больше работы, но это все же возможно (например, вы можете добавить переменную GET, показывающую механизм перенаправления либо на конкретной тестовой странице, либо даже на каждой странице, или вы можете перенаправление на страницу, которая устанавливает $redirectionEngine
, а затем включает реальный индекс). Хотя у меня нет большого опыта работы с перенаправлением, кроме как с mod_rewrite на apache, я считаю, что это должно работать практически со всеми механизмами перенаправления.
Другой вариант — использовать тестовую среду. По сути, идея состоит в том, чтобы либо создать папку и настроить для нее перенаправление, либо устранить необходимость в доступе на запись файловой системы и вместо этого иметь папку (или папку для каждого механизма перенаправления). У этого есть некоторые недостатки: вам все еще нужен доступ на запись, чтобы настроить перенаправление для основного сайта (хотя, возможно, не для всех механизмов перенаправления, я действительно не знаю, как вы все их правильно настроили - но для apache вам потребуется доступ на запись если вы собираетесь включить перенаправление), боту может быть проще определить, какое программное обеспечение и какую его версию вы используете, через доступ к тестам (если вы не удалите тестовые папки после тестирования), и вам нужно иметь возможность переписать только часть сайта (что имеет смысл для любого механизма перенаправления, но я не собираюсь слепо принимать эту функциональность). Тем не менее, это имеет то преимущество, что легче выяснить, какой механизм перезаписи используется, или, по сути, любой другой аспект перенаправления. Могут быть и другие преимущества, о которых я не знаю, поэтому я просто даю варианты, а вы сами выбираете свой метод.
Я считаю, что с некоторыми вариантами, оставленными пользователю, это должно помочь вам настроить систему так, как вам нравится.
person
Jasper
schedule
25.12.2012