Что такое код asp msdosdiroutput

Содержание

Не работает сформированный редирект

07.06.2012, 11:26

Не работает редирект
Всем привет! Хочу склеить сайты с WWW и без — но ничего не выходит, обыскал пол интернета, все.

Не работает редирект
Здравствуйте, делаю добавление в бд с помощью формы. Чтобы записи не добавлялись несколько раз при.

Не работает редирект
Добрый день. Подскажите плз, где ошибка в скрипте, так как не хочет работать:

Не работает редирект
Не срабатывает редирект. Помогите. .htacces: RewriteEngine on RewriteBase / RewriteCond.

07.06.2012, 11:31 2 07.06.2012, 11:56 3

Да нет блин. Это я случайно в вопросе не поставил. кавычку.
Пробовал я писать и Response.Redirect и даже Response.Write

Урл формируется но ничерта не пересылает.
Но если то-же самое делаю через меню видовса «Run», все работает. Т.е. этот урл вставляю в строку и все пашет.
Дорбавлю что это все отправляется через VPN security. Но это значения не имеет.
Может кто подскажет как по событию сделать POST или GET. Т.е. возможно ли, то что получается в строке урл отправить как пост или гет но без участия человека. Т.е. я получил данные в скрипт, вставил их в некую форму и они улетели на урл.
ПОМОГИТЕ.

07.06.2012, 12:06 4
07.06.2012, 12:06
07.06.2012, 12:13 5
07.06.2012, 13:27 6

Уточни, что именно у тебя происходит. То есть выполняет ли браузер переход на заданный адрес, но данные не передаются. Или даже и переход не происходит?

Код совершенно простой и все должно работать. На странице ok.asp параметры service_id должы прекрасно считываться через коллекцию Request.QueryString. Твой метод использует как раз метод GET для передачи параметров. Стандратного метода для использования POST не существует. Единственным выходом будет, как мне кажется, формировать форму с hidden полями, и делать ее автоматическую отправку с помощью JavaScript.

Насчет Response.Write я не понял, какое отношение он может иметь в передаче параметров другой странице.

07.06.2012, 17:37 7

Уточняю.
Я параметры получаю от чужего сервера. Через VPN. Мой скрипт проверяет наличие client_id на сответствие и после этого формирует урл с ответом.
server.urlencode необходимо использовать т.к. это требование того урл на который отправка происходит.

Теперь наступает странное. Допустим я получил эти все данные. Урл сформировался и идет редирект и. ничего.
Но достаточно этот самый урл (с параметрами) просто ввести в адресную строку сервера или в командную строку — все блин работает.
Т.е. броузер выполняет переход на заданный адрес и данные передаются.
Т.е. это когда я вручную это делаю. А автоматически ничерта не происходит.
Все формируется, но нет реакции принимающего сервера. В ручную реакция есть и причем правильная.
Я даже не могу понять где тут ошибка?

. Часть 1

Интерфейс к базе данных с помощью ASP

Постановка задачи

Предположим, перед нами стоит задача создания газетного сайта, причем некоторые из его читателей должны иметь право пополнять его новыми статьями, снабжаемыми фотографиями непосредственно с самого сайта и без программирования. Предположим также, что такой сайт должен иметь возможности удаления статей, их поиска, а также сортировки. С первого взгляда может показаться, что решение такой задачи не под силу начинающему программисту ASP, однако, как вы скоро увидите, это далеко не так.

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

Я почти уверен, что подобная задача актуальна применительно практически к любому сайту, тем более что подобным образом (разве что без возможностей поиска, сортировки и удаления) работает большинство гостевых книг (guestbook).

Что нам понадобится

Для реализации вышеизложенной задачи нам потребуется персональный компьютер с Microsoft Windows NT или Windows 2000 (можно и Workstation, и Server), установленный IIS (Internet Information Server), какой-нибудь HTML-редактор (советую использовать Macromedia Dreamweaver), Microsoft Access (версии 95, 97 или 2000) и самый обычный текстовый редактор.

Создание и подготовка базы данных

Прежде всего создадим базу данных статей, для чего:

  • запустим приложение Microsoft Access;
  • любым из известных способов создадим новую базу данных. Назовем ее «Articles»;
  • в созданной базе данных создадим таблицу с именем, например «Articles»;
  • пользуясь инструментом «Конструктор», определим поля нашей таблицы и типы принимаемых ими значений (рис. 1);
  • заполним таблицу несколькими статьями в соответствии с созданными полями (рис. 2);
  • сохраним базу данных в файле «ArticlesDB.mdb».

Далее необходимо прописать нашу базу данных в соответствующем разделе источников данных системы, для этого:

  • запустим программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
  • перейдем во вкладку «System DSN» и создадим новый источник данных, нажав на «Add…»;
  • в появившемся списке драйверов выберем драйвер баз данных Microsoft Access — «Microsoft Access Driver (*.mdb)» и нажмем на «Finish»;
  • в строке «Data Source Name» зададим имя нашей базы данных, например «Articles» (это то имя, по которому мы в дальнейшем будем обращаться к ней);
  • нажмем на «Select…», выберем подготовленный нами файл «ArticlesDB.mdb» и нажмем «OK».

В результате в списке источников данных в вашей системе появится строка, представленная на рис. 3.

Оформляем главную страницу (index.asp)

С ASP работать очень просто. Для этого надо всего лишь вставить текст скрипта ASP в пару тэгов . В остальном ASP-файл ничем не отличается от HTML-файла (за исключением, пожалуй, расширения). Комментарии в HTML, как известно, вставляются в пару тэгов , в ASP же закомментировать строку можно при помощи символа ‘ (апостроф) в ее начале.

Теперь давайте разберемся. Во-первых, как вы наверняка заметили, ASP-код легко сочетается с HTML-тэгами; в этом его достоинство. Так, к примеру, строка Response.Write Link & «
» отображает на экране браузера клиента подготовленное сервером значение переменной Link и HTML-тэг
, то есть перевод строки. Особый интерес вызывает переменная rs. Для искушенных программистов сразу скажу — это указатель. Однако в ASP с целью облегчения работы начинающих указатели маскируются. Здесь не встретишь громоздких С’шных конструкций, типа «я знаю, что ты знаешь, что я знаю», или, выражаясь программистским языком, указатель на указатель… Однако сделано это так искусно, что гибкость программирования при этом не теряется, нет лишь прямой работы с указателями, а только работа с помощью специальных функций, скрывающих от программиста рутину и защищающих указатели от некорректных действий. Таким образом, выражение rs.Fields («Article»).value означает значение поля «Article» текущего значения указателя на элемент базы данных (в нашем случае статей) и содержит текст статьи, которая соответствует текущей позиции указателя на все статьи. Переход к следующему элементу базы (смещение указателя) выполняется с помощью инструкции Rs.MoveNext. В приведенном выше примере это не делается, а попросту формируется ссылка на текст статьи в виде ее названия и отображается комментарий самой первой статьи, соответствующей результату запроса. Давайте попробуем отобразить все статьи нашей базы данных на главной странице в виде HTML. И еще, обратите особое внимание на директиву:

Она по сути формирует ссылку на файл, содержащий шаблон отображения самой статьи, причем передает идентификатор статьи ему в качестве параметра. Полностью файл шаблона приведен в приложении к настоящей статье, а механизм его работы может быть кратко представлен следующим образом:

Первая строчка скрипта шаблона HTML присваивает переменной TheID значение, переданное ссылкой с использованием метода Request.QueryString. Далее открывается база данных, из которой читается статья (запись), соответствующая идентификатору, переданному из главного скрипта (index.asp).

Создаем главную страницу

Таким образом в таблицу в цикле будут добавляться ряды со ссылками на статьи и с аннотациями, пока не будут отображены все статьи из базы данных. Следует обратить внимание на переменную Cnt. По окончании цикла она будет содержать число обработанных статей (рядов таблицы).

Язык структурированных запросов — SQL

Настала пора разобраться с тем, что таится за строчками:

По сути, именно за этими двумя строчками кроется работа с нашей базой данных: первая представляет собой текстовую строку с запросом к базе данных (текстовые строки в ASP записываются в двойных кавычках); вторая — содержит директиву выполнения этого запроса с одновременным присвоением результата переменной (указателю на записи в базе данных). В рамках настоящей статьи мы не будем рассматривать SQL (Structured Query Language) во всех деталях, а остановимся лишь на тех его операторах, без понимания которых дальнейшая работа будет невозможна. Для тех, кому этого покажется недостаточным, советую посетить отобранные мною сайты с детальной документацией по SQL.

Для полноценной работы нам необходимо познакомиться с четырьмя операторами этого мощного языка, предназначенного специально для работы с базами данных.

DELETE удаляет те ряды из «Имя Таблицы», которые удовлетворяют условию, определенному в «Определении», и возвращает число удаленных рядов. Если выполнить команду DELETE без условия WHERE, то все ряды указанной таблицы будут удалены. В этом случае DELETE возвратит 0. Ключевое слово LOW_PRIORITY откладывает выполнение операции DELETE до завершения работы чтения из таблицы других клиентов.

SELECT используется для извлечения рядов (записей) из одной или более таблиц. Выражение_Select определяет столбцы таблицы, значения которых необходимо извлечь. Все ключевые поля должны быть заданы в строгой последовательности. К примеру, выражение HAVING должно следовать за любым выражением GROUP BY и до любого выражения ORDER BY.

Выражение_Select можно заменить псевдонимом (alias) с помощью ключевого слова AS. Псевдоним используется в качестве идентификатора имени столбца и может быть использован наряду с ключевыми словами ORDER BY или HAVING.

Выражение HAVING может относиться к любому столбцу или псевдониму в Выражении_Select. Оно применяется к запросу в последнюю очередь, непосредственно перед посылкой данных клиенту. SELECT . INTO OUTFILE ‘имя_файла’ заносит отобранные записи в файл. Файл создается непосредственно на сервере и не может «уже существовать» (одна из основных причин такого механизма заключается в предотвращении случайного «затирания» различных важных файлов).

INSERT используется для добавления новых записей в существующую таблицу. Допустимо две формы использования INSERT.

Первая форма — INSERT . VALUES — вставляет ряды на основании заданных значений. Вторая форма — INSERT . SELECT — вставляет ряды, выбранные из другой таблицы.

Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Ключевое слово IGNORE в команде INSERT позволяет избегать вставки повторяющихся строк (используется в сочетании с ключевыми словами PRIMARY или UNIQUE). Для второй формы INSERT INTO . SELECT операция не может содержать выражения ORDER BY. Таблица, в которую производится добавление записей, не может присутствовать в выражении FROM части SELECT запроса потому, что запрещено производить выделение из той же самой таблицы, в которую производится вставка.

REPLACE служит для редактирования содержимого таблицы и работает в точности как INSERT, за исключением того, что если старая запись в таблице имеет то же значение, что и записываемая, то старая запись удаляется прежде, чем добавляется новая.

UPDATE обновляет поля существующей таблицы новыми значениями. Выражение SET показывает, какие поля (столбцы) должны быть изменены, и значения, которые должны быть им присвоены. Выражение WHERE, если оно есть, указывает, какие ряды должны быть обновлены. В противном случае операция применяется ко всем рядам таблицы. Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Выражения UPDATE выполняются слева направо.

Обновляет значение поля Password в таблице WAPassword, записывая в поле, чей идентификатор ID равен 1 значение ‘passw’.

Увеличивает значение поля counter таблицы Счетчик на 1.

Удваивает поле age, а затем прибавляет 1 к его значению в таблице persondata.

Что такое Global.asa

Global.asa позволяет выполнять определенные скрипты в начале работы клиентской сессии или при инициализации IIS. Примером тому может служить простейший счетчик числа посещений сайта. Более того, допустимо использовать множественные файлы Global.asa. Однако следует помнить, что ASP-скрипт ищет самый близкий (расположенный в том же каталоге) файл Global.asa и использует именно его.

По сути, этот файл может содержать четыре скрипта: первый будет выполняться при инициализации службы IIS/PWS (Application_OnStart), второй — при остановке службы IIS/PWS (Application_OnEnd) (обычно эти первые два скрипта отрабатывают в процессе перезагрузки компьютера), и еще два скрипта выполняются дополнительно при инициализации сессии пользователя (Session_OnStart) и по ее окончании (Session_OnEnd). Данная схема очень сильно напоминает пары «конструктор-деструктор». Неспроста всякая переменная, которая должна быть использована (например, в текущей сессии), может быть инициализирована в Session_OnStart с тем, чтобы быть использованной в процессе работы сессии, она же уничтожается (обнуляется) в Session_OnEnd.

Global.asa не может содержать тэгов HTML. Недопустимо использование JavaScript. Не рекомендуется писать файл Global.asa с помощью каких-либо HTML-редакторов, для этого гораздо лучше использовать NotePad. И еще один совет: прежде чем вставлять скрипт в файл Global.asa, попробуйте его в работе в обычном ASP-файле.

Пример файла Global.asa

Добавляем новую статью (UploadForm.asp и Upload2DBS.asp)

Теперь, когда мы разобрались с SQL, можно приступать к добавлению новой статьи, причем делать мы это будем прямо с сайта, а если быть точнее — непосредственно с HTML-формы. Для этого сначала создадим файл с самой формой и определим скрипт-реакцию на подтверждение (кнопку «Publish the article!»). (Предполагается, что читатель знаком с азами построения HTML-форм, поэтому мы рассмотрим этот процесс, не вдаваясь в детали построения форм.)

Прежде всего следует уточнить задачу на этом этапе. Итак, очевидно следующее:

  • на загрузку статьи с сайта должен иметь право не каждый (следовательно, желательно предусмотреть пароль для доступа к этой функции);
  • у каждой статьи есть определенная тема (рубрика), причем она не может быть произвольной, а должна выбираться из списка;
  • список можно хранить непосредственно в HTML-файле и, каждый раз изменяя его, изменять сам файл. Это самый простой и быстрый способ;
  • однако для того, чтобы позволить динамически изменять и пополнять этот список, рекомендуется держать его в базе данных. Это позволит пользователям произвольным образом изменять его содержимое и не потребует переделки формы. Для простоты сначала рассмотрим вариант со встроенным («жестко прошитым») рубрикатором.

Как видим, передача управления осуществляется благодаря директиве ACTION=»http://localhost/Upload2DBS.asp»> в тэге формы. Тем самым указывается скрипт-ответ на реакцию пользователя после нажатия на кнопку «Publish the article!». Теперь остановимся на селекторе рубрик. Как уже отмечалось, желательно перевести его содержимое в базу данных. Для этого в нашей базе данных (файл ArticlesDB.mdb) создадим новую таблицу с именем, к примеру «Topics», в которой с помощью конструктора определим всего одно поле — «Topic» типа «текст». Далее заполним эту таблицу произвольными значениями нашего рубрикатора и отсортируем полученный список в алфавитном порядке. После чего следует заменить тэг

Теперь давайте разберемся с самой сутью дальнейшей работы. Что же должен делать наш скрипт-реакция?

Во-первых, следует позаботиться о том, чтобы все обязательные поля (а они отмечены звездочкой) были введены. Наиболее правильным способом проверки этого является скрипт, написанный на любом языке описания скриптов (например, JavaScript), который будет проверять, введены ли значения обязательных полей. Для этого достаточно добавить в определение тэга формы параметр onsubmit=»preprocess();», где preprocess() — имя функции-скрипта, который и будет осуществлять проверку. Здесь как нельзя кстати видно преимущество языков описания сценариев (JavaScript, Jscript, VBScript) перед ASP. ASP выполняется на стороне сервера, а перегружать связь «клиент-сервер» простой проверкой типа «введены ли значения», согласитесь, неправильно. Однако специально в целях обучения мы будем делать это с помощью ASP.

И еще. Прежде чем приступить к выполнению нашей задачи, следует сказать еще об одной небольшой проблеме: когда мы будем вставлять в ячейку базы данных текст, его форматирование (даже самое простое) не сохранится, и в дальнейшем его невозможно будет корректно отобразить на HTML-странице, поскольку поле Memo хранит неформатированную строку текста. Чтобы избежать этого, следует написать функцию, которая позволит производить примитивное HTML-форматирование введенного текста статьи, перед тем как записать его в базу данных. Другими словами, в самом примитивном случае (хотя бы для того, чтобы сохранить исходную разбивку на строки) функция должна вставлять символы конца строки там, где во входном потоке имеются символы переноса строк.

Удаляем статью (RemoveForm.asp и Rem.asp)

Было бы неплохо предусмотреть возможность удаления статьи с нашего сайта: во-первых, она может устареть, а во-вторых, в процессе ее подготовки не исключены ошибки или опечатки. Останавливаться на форме удаления статьи не будем, скажем лишь, что она содержит единственные элементы с запросом пароля и кнопкой удаления (см. файл RemoveForm.asp), и сразу перейдем к рассмотрению непосредственно процесса удаления:

Особое внимание следует уделить первым двум строкам. Они получают значение глобальной переменной текущего сеанса (сессии) работы со значением идентификатора текущей статьи (в нашем случае удаляемой), которая была инициализирована (файл ArtTmp.htm) следующей строкой:

Таким образом, в текущий скрипт передается в качестве параметра сеансовая переменная с идентификатором текущей статьи, которую необходимо удалить. Имеется в виду, что ссылка на удаление присутствует в странице с шаблоном (файл ArtTmp.htm) и удаляемая статья является текущей.

Организуем поиск (SearchForm.asp и SearchDBS.asp)

Как известно, без поиска навигация в сколь-нибудь солидной базе данных невозможна в принципе. Попробуем организовать поиск статьи по ее реквизитам, причем постараемся организовать булев (логический) поиск, соединяя отдельные значения критериев поиска с помощью логики «И/ИЛИ».

Опять же не заостряя внимание на поисковой форме (файл SearchForm.asp), перейдем непосредственно к самому процессу поиска:

Самое интересное происходит при формировании запроса к базе из составляющих:

В зависимости от введенной пользователем комбинации исходных полей из этих компонентов формируется окончательный запрос, в частности для полей «Author» и «Title». Возможны четыре случая: оба поля пусты, пусто первое поле, пусто второе поле и оба поля не пусты. Соответствующая строка SQL-запроса в каждом из этих случаев формируется по-своему. То же самое относится к состоянию селекторов рубрик статей и порядку их сортировки. При добавлении той или иной подстроки учитывается состояние «радиокнопок» И/ИЛИ и соответствующая подстрока добавляется в SQL-запрос, предваряясь логическим элементом «and» или «or» соответственно. После того как окончательный запрос сформирован, он выполняется, а результирующая страница формируется исходя из списка статей, удовлетворяющих критериям.

Полный код приведенных в статье примеров, включая файл базы данных, находится на нашем CD-ROM.

И в заключение

Напоследок хотелось бы сориентировать разработчиков ASP-страниц в мире документации и инструментальных средств. Дело в том, что автор настоящей статьи провел не один день сидя в Интернете в поисках всевозможных исходных текстов, документации, инструментальных средств и теоретических основ этого мощного средства.

Среди множества инструментальных средств, служащих для облегчения создания ASP-приложений, выделяются два: Easy ASP © Eric Banker, 2000 и Microsoft InterDev из комплекта Microsoft Visual Studio 6.0. Первый — очень удобное, несложное и небольшое средство для быстрого создания ASP-приложений. Второй представляет собой мощный, тяжеловесный интегрированный пакет в духе Microsoft для разработки всевозможных Web-приложений.

Временная версия EasyASP 4.0 находится на нашем CD-ROM.

Среди огромного числа сайтов мною были отобраны те, посещение которых было для меня особенно полезным и с которыми хотелось ознакомить читателей, а именно:

http://www.15seconds.com/issue/000210.htm — создание динамичных JavaScript-скриптов с помощью ASP и интерфейсов к базам данных

http://www.alphasierrapapa.com/iisdev/ — сайт, посвященный разработке серверов IIS с помощью ASP

http://www.websiteresources.com/ — огромная база исходных текстов всевозможных Web-программ

Примеры ASP-кода для профессионалов

http://www.asptoday.com/search.asp?category=ASP Tricks — масса полезных советов для начинающих программировать на ASP

http://www.oreilly.com/catalog/aspnut/ — замечательная книга популярнейшей серии «In a Nutshell» всемирно известного издательства O’REILLY «ASP in a Nutshell A Desktop Quick Reference». На сайте бесплатно размещена одна из глав книги

http://www.chilisoft.net/ — версии ASP для различных платформ можно скачать с этого сайта

http://www.willcam.com/sql/ — введение в структурированный язык запросов SQL

SQL Reference and Example Site — хорошо структурированный материал по SQL

Редирект с http на https для Linux

Редирект на Linux-хостинге

Чтобы ваш сайт работал по безопасному протоколу HTTPS, после установки SSL-сертификата нужно настроить перенаправление (редирект) с HTTP на HTTPS в панели управления.

Для этого ваш сайт должен быть размещен на хостинге REG.RU.

Обращаем внимание, что редирект стоит настраивать только в том случае, если в панели управления уже установлен SSL-сертификат: Как установить SSL-сертификат на хостинг?

Как настроить редирект?

Если у вас на хостинге панель управления ISPmanager 5, переадресацию можно настроить в несколько кликов средствами панели управления.

Если у вас на хостинге панель управления — cPanel или Parallels Plesk, редирект настраивается только через конфигурационный файл .htaccess

Настройка редиректа в ISPmanager 5

Откройте панель управления ISPmanager5 и перейдите в раздел «WWW-домены». Выберите домен, который должен открываться по HTTPS и нажмите Изменить. Поставьте галочку напротив пункта Перенаправлять HTTP-запросы в HTTPS и нажмите ОК, чтобы сохранить изменения.

Готово. Теперь ваш сайт будет работать по протоколу HTTPS.

Настройка редиректа в cPanel и Plesk

Откройте файл .htaccess. Он расположен в корневой папке сайта. Если файл .htaccess отсутствует, то причина может быть в том, что в cPanel не отображаются скрытые файлы. Чтобы отобразить скрытые файлы, воспользуйтесь инструкцией.

Как открыть файл .htacсess

В разделе «Домены» выберите пункт Дополнительные домены. Нажмите по строке, где указана корневая папка домена. Затем нажмите правой кнопкой по файлу .htaccess и выберите в появившемся списке пункт Edit:

Под нужным доменом нажмите по строке, где указана корневая папка домена. Откроется корневая папка вашего сайта. Найдите в списке файл .htaccess и кликните по нему левой кнопкой мыши:

Добавьте в конце файла .htaccess одно из правил, которое подходит для вашего случая:

Редирект всех страниц с http:// на https://, в том числе и с http://www на https://

или воспользуйтесь вторым вариантом (если первый вариант не поможет):

если все варианты не помогли и возникает циклическая переадресация, добавьте:

заметки системного администратора

заметки по IT технологиям: просто о сложном

Архив за день: 11.10.2012

301 редирект – корректная переадресация через htaccess и php header

Редирект 301 (301 Permanent Redirect) используется в нескольких случаях: при смене домена, при переносе страницы сайта, для склейки имени сайта с www и без него. Это важно для передачи Page Rank (PR) и сохранения поискового трафика.

Сам я столкнулся с его необходимостью, когда после переезда своего портала из зоны com, в ru обнаружил, что Google, Яндекс и другие поисковые системы, естественно не “забывают” старого сайта (отчасти еще и из-за того, что у меня была некорректно установлена своя страница, для обработки 404 ошибки, которая возвращала код ответа 200 OK). Более того, Google за полгода оставил для нового сайта PR=0, хотя для старого он сохранился PR=4.

Тема 301 редиректа постоянно обсуждается в различных SEO-форумах, да и каждая поисковая система в своей системе помощи имеет специальные разделы. Пока разбирался я нашел перечисленные ниже варианты организации редиректа, часть из которых опробовал у себя.

301 редирект это наилучший метод сохранения ваших позиций в поисковых системах, когда вы переносите страницу или сайт. Код “301” интерпретируется как постоянное перемещение (“moved permanently”).

Простой редирект (в файле .htaccess или httpd.conf для Apache):

Redirect 301 / http://www.you.com/new.htm
где:
Redirect 301 – это инструкция, говорящая что страница перемещена
/ – означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано
http://www.you.com/new.htm – новая страница или сайт (не забывайте поставить последний “/”, если переадресация идет на сайт).Чтобы переадресовать только страницу, сохранив PR старой страницы:
Redirect 301 /old/old.htm http://www.you.com/new.htm
где:
/old/old.htm – путь и имя старой страницы

Аналогичный синтаксис для переадресации сайта:
RedirectPermanent / http://www.you.com/

Пример переадресации каталога:
RedirectPermanent /old-directory http://www.domain.com/new-directory/ Например, зашедших в test переадресуем на www.test.com, остальных на enter.test.com (порядок следования записей важен):

Примечание: для моих целей (изменение домена) хватило первого варианта простого 301 редиректа.

Использование mod_rewrite (прописывается в файле .htaccess):

Ставшая классической задача слияния имена сайта с www и без него, решается так:

или альтернативный синтаксис:

Обозначение [R=301,L] означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

Редирект старого домена на новый:

Например, если необходимо чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в .htaccess:

Для замены всех .htm файлов .html файлами:

Редирект на PHP:

Лучше указать HTTP/1.1, так как более старые не поддерживают виртуальный хостинг. Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:

Редирект на ASP

Редирект на ASP.NET

Редирект на ColdFusion

Редирект с помощью meta refresh

где 0 – задержка переадресации в секундах, newdomain.com -страница, куда переадресуем. Некоторые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя, на мой взгляд это уже не актуально. Такой редирект не сможет склеить ваши сайты (с www и без) и передать PR, так как игнорируется поисковыми системами. Он возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому ее стоит применять только для страниц, которые не будут индексироваться.

Редирект с помощью JavaScript

Варианты переадресации на JavaScript чаще реализуются с использованием функции setTimeout(‘функция’, задержка).

Например, автоматически сделать Click на кнопке “Submit” формы “searchform” через 0.1 сек после загрузки кода:

На кнопку “Submit” можно повесить любое действие, например, открыть новый url в этом окне. Кстати такое редиректы чаще встречаются при организации Дорвеев (DorWay) – браузер Пользователя будет переадресован на другую страницу, а поисковый робот, который “не понимает” JavaScript, будет индексировать эту страницу, недоступную пользователю. На ней дорвейщики размещают текст, напичканный “нужными” ключевыми словами.

Чтобы просто переадресовать на другую страницу можно вставить после один из вариантов кода на JavaScript:

  • location=”http://www.newdomain.com”;
  • document.location.href=”http://www.newdomain.com”;
  • window.location.reload(“http://www.newdomain.com”);
  • document.location.replace(“http://www.newdomain.com”);

В последнем случае уже нельзя будет вернуться на страницу выполнившую переадресацию, так как ее адрес стирается из history, что нередко и нужною. Если нужна задержка по времени, можно оформить location=”http://www.newdomain.com”; в виде функции и вставить ее в setTimeout(‘функция()’, задержка_в_мсек); Редирект на JavaScrupt не является 301 редиректом и не передаст PR страницы, не сможет обеспечить ее склейку.

Отметим дополнительно некоторые особенности редиректов:

  • Методы редиректа с .htaccess работают только на Linux серверах, имеющих Apache с включенным модулем Mod-Rewrite.
  • Использование .htaccess создает дополнительную нагрузку на сервер Apache, более эффективно прописывать те же команды в его конфигурационном файле hpptd.conf, но, как правило, к нему нет доступа у вебмастера.
  • 301 редирект, позволяет сберечь трафик и передать PR страницы для поисковых систем (для Google точно).
  • процесс склейки и передачи PR занимает длительное времени – до нескольких месяцев и также зависит от поисковой системы, поэтому не удаляйте старую страницу или сайт, пока не произойдет окончательный перенос.
  • некоторые поисковые системы требуют для склейки сайтов дополнительных настроек, например, для Яндекса нужно дополнительно прописывать robots.txt

Заключение. Безопасный способ редиректа старых страниц на новые или старого сайта на новый адрес, с сохранением позиций в поисковых системах, заключается в использование 301 редиректа, который также позволит вам передать старый Page Rank страницы на новый сайт.

Маршрутизация к действиям контроллера в ASP.NET Core Routing to controller actions in ASP.NET Core

В ASP.NET Core MVC используется ПО промежуточного слоя маршрутизации для сопоставления URL-адресов входящих запросов с действиями. ASP.NET Core MVC uses the Routing middleware to match the URLs of incoming requests and map them to actions. Маршруты определяются в коде запуска или атрибутах. Routes are defined in startup code or attributes. Они описывают то, как пути URL-адресов должны сопоставляться с действиями. Routes describe how URL paths should be matched to actions. С помощью маршрутов также формируются URL-адреса (для ссылок), отправляемые в ответах. Routes are also used to generate URLs (for links) sent out in responses.

Действия маршрутизируются либо на основе соглашений, либо с помощью атрибутов. Actions are either conventionally routed or attribute routed. При добавлении маршрута к контроллеру или действию они становятся маршрутизируемыми с помощью атрибутов. Placing a route on the controller or the action makes it attribute routed. Дополнительные сведения см. в разделе Смешанная маршрутизация. See Mixed routing for more information.

В этом документе описывается взаимодействие между MVC и маршрутизацией и использование возможностей маршрутизации в типичных приложениях MVC. This document will explain the interactions between MVC and routing, and how typical MVC apps make use of routing features. Подробные сведения о расширенной маршрутизации см. в статье Маршрутизация. See Routing for details on advanced routing.

Настройка ПО промежуточного слоя маршрутизации Setting up Routing Middleware

Метод Configure содержит код, который выглядит примерно так: In your Configure method you may see code similar to:

В вызове UseMvc метод MapRoute используется для создания одного маршрута, который называется маршрутом default . Inside the call to UseMvc , MapRoute is used to create a single route, which we’ll refer to as the default route. В большинстве приложений MVC используется маршрут с шаблоном, сходным с маршрутом default . Most MVC apps will use a route with a template similar to the default route.

Шаблон маршрута «//» может сопоставлять путь URL-адреса, например /Products/Details/5 , и извлекает значения маршрута < controller = Products, action = Details, >путем разбивки пути на лексемы. The route template «//» can match a URL path like /Products/Details/5 and will extract the route values < controller = Products, action = Details, >by tokenizing the path. MVC попытается найти контроллер с именем ProductsController и выполнить действие Details : MVC will attempt to locate a controller named ProductsController and run the action Details :

Обратите внимание на то, что в этом примере привязка модели будет использовать значение >, чтобы присвоить параметру id значение 5 при вызове действия. Note that in this example, model binding would use the value of > to set the id parameter to 5 when invoking this action. Дополнительные сведения см. в разделе Привязка модели. See the Model Binding for more details.

Использование маршрута default : Using the default route:

Шаблон маршрута: The route template:

определяет Home в качестве объекта controller по умолчанию. defines Home as the default controller

определяет Index в качестве объекта action по умолчанию. defines Index as the default action

определяет необязательный параметр id . defines id as optional

Параметры маршрута по умолчанию и необязательные параметры необязательно должны присутствовать в пути URL-адреса для сопоставления. Default and optional route parameters don’t need to be present in the URL path for a match. Подробное описание синтаксиса шаблона маршрута см. в разделе Справочник по шаблону маршрута. See Route Template Reference for a detailed description of route template syntax.

«//» может сопоставляться с путем URL-адреса / и выдает значения маршрута < controller = Home, action = Index >. «//» can match the URL path / and will produce the route values < controller = Home, action = Index >. Для объектов controller и action используются значения по умолчанию. id не имеет значения, так как в пути URL-адреса нет соответствующего сегмента. The values for controller and action make use of the default values, id doesn’t produce a value since there’s no corresponding segment in the URL path. MVC будет использовать эти значения маршрута для выбора действия HomeController и Index : MVC would use these route values to select the HomeController and Index action:

При использовании этого определения контроллера и шаблона маршрута действие HomeController.Index будет выполняться для любых из следующих путей URL-адресов: Using this controller definition and route template, the HomeController.Index action would be executed for any of the following URL paths:

Универсальный метод UseMvcWithDefaultRoute : The convenience method UseMvcWithDefaultRoute :

Можно использовать вместо следующего метода: Can be used to replace:

UseMvc и UseMvcWithDefaultRoute добавляют экземпляр RouterMiddleware в конвейер ПО промежуточного слоя. UseMvc and UseMvcWithDefaultRoute add an instance of RouterMiddleware to the middleware pipeline. MVC не взаимодействует с ПО промежуточного слоя напрямую, а использует маршрутизацию для обработки запросов. MVC doesn’t interact directly with middleware, and uses routing to handle requests. MVC подключается к маршрутам посредством экземпляра MvcRouteHandler . MVC is connected to the routes through an instance of MvcRouteHandler . Код метода UseMvc имеет примерно следующий вид: The code inside of UseMvc is similar to the following:

Метод UseMvc не определяет маршруты напрямую, а добавляет заполнитель в коллекцию маршрутов для маршрута attribute . UseMvc doesn’t directly define any routes, it adds a placeholder to the route collection for the attribute route. Перегрузка UseMvc(Action ) позволяет добавлять собственные маршруты, а также поддерживает маршрутизацию с помощью атрибутов. The overload UseMvc(Action ) lets you add your own routes and also supports attribute routing. Метод UseMvc и все его варианты добавляют заполнитель для маршрута на основе атрибутов — маршрутизация с помощью атрибутов доступна всегда вне зависимости от того, как настроен метод UseMvc . UseMvc and all of its variations adds a placeholder for the attribute route — attribute routing is always available regardless of how you configure UseMvc . Метод UseMvcWithDefaultRoute определяет маршрут по умолчанию и поддерживает маршрутизацию с помощью атрибутов. UseMvcWithDefaultRoute defines a default route and supports attribute routing. В разделе Маршрутизация с помощью атрибутов приводятся более подробные сведения о маршрутизации с помощью атрибутов. The Attribute Routing section includes more details on attribute routing.

Маршрутизация на основе соглашений Conventional routing

Маршрут default : The default route:

является примером маршрутизации на основе соглашений. is an example of a conventional routing. Такой стиль называется маршрутизацией на основе соглашений по той причине, что он предполагает определение соглашения для путей URL-адресов: We call this style conventional routing because it establishes a convention for URL paths:

первый сегмент пути сопоставляется с именем контроллера; the first path segment maps to the controller name

второй сегмент сопоставляется с именем действия; the second maps to the action name.

третий сегмент используется для необязательного параметра id , который сопоставляется с сущностью модели. the third segment is used for an optional id used to map to a model entity

При использовании этого маршрута default путь URL-адреса /Products/List сопоставляется с действием ProductsController.List , а путь /Blog/Article/17 сопоставляется с BlogController.Article . Using this default route, the URL path /Products/List maps to the ProductsController.List action, and /Blog/Article/17 maps to BlogController.Article . Такое сопоставление основывается только на именах контроллера и действия, но не на пространствах имен, расположениях исходных файлов или параметрах метода. This mapping is based on the controller and action names only and isn’t based on namespaces, source file locations, or method parameters.

Использование маршрутизации на основе соглашений с маршрутом по умолчанию позволяет быстро создавать приложение, не придумывая новый шаблон URL-адреса для каждого определяемого действия. Using conventional routing with the default route allows you to build the application quickly without having to come up with a new URL pattern for each action you define. В случае с приложением с действиями в стиле CRUD единообразие URL-адресов для всех контроллеров позволяет упростить код и сделать пользовательский интерфейс более предсказуемым. For an application with CRUD style actions, having consistency for the URLs across your controllers can help simplify your code and make your UI more predictable.

Параметр id определяется в шаблоне маршрута как необязательный. Это означает, что действия могут выполняться, даже если идентификатор не указан в URL-адресе. The id is defined as optional by the route template, meaning that your actions can execute without the ID provided as part of the URL. Как правило, если параметр id отсутствует в URL-адресе, привязка модели присваивает ему значение 0 , и в результате в базе данных не будет найдена сущность, соответствующая >. Usually what will happen if id is omitted from the URL is that it will be set to 0 by model binding, and as a result no entity will be found in the database matching >. Маршрутизация с помощью атрибутов обеспечивает детальный контроль, позволяя настраивать идентификатор как обязательный лишь для некоторых действий. Attribute routing can give you fine-grained control to make the ID required for some actions and not for others. В документации необязательные параметры, такие как id , будут включаться, только если они, скорее всего, могут использоваться в соответствующей ситуации. By convention the documentation will include optional parameters like id when they’re likely to appear in correct usage.

Несколько маршрутов Multiple routes

В метод UseMvc можно добавить несколько маршрутов, добавив дополнительные вызовы MapRoute . You can add multiple routes inside UseMvc by adding more calls to MapRoute . Таким образом можно определить несколько соглашений или добавить маршруты на основе соглашений, предназначенные для определенного действия, например: Doing so allows you to define multiple conventions, or to add conventional routes that are dedicated to a specific action, such as:

Маршрут blog здесь — это выделенный маршрут на основе соглашения. Это означает, что он использует систему маршрутизации на основе соглашений, но предназначен для определенного действия. The blog route here is a dedicated conventional route, meaning that it uses the conventional routing system, but is dedicated to a specific action. Так как параметры controller и action отсутствуют в шаблоне маршрута, они могут иметь только значения по умолчанию, поэтому этот маршрут всегда будет сопоставляться с действием BlogController.Article . Since controller and action don’t appear in the route template as parameters, they can only have the default values, and thus this route will always map to the action BlogController.Article .

Маршруты в коллекции маршрутов упорядочены и обрабатываются в порядке добавления. Routes in the route collection are ordered, and will be processed in the order they’re added. Поэтому в этом примере маршрут blog будет проверяться перед маршрутом default . So in this example, the blog route will be tried before the default route.

В выделенных маршрутах на основе соглашений часто используются обобщающие параметры, такие как <*article>, для фиксации оставшейся части пути URL-адреса. Dedicated conventional routes often use catch-all route parameters like <*article>to capture the remaining portion of the URL path. Из-за этого маршрут может оказаться слишком универсальным, то есть он будет соответствовать URL-адресам, которые должны сопоставляться с другими маршрутами. This can make a route ‘too greedy’ meaning that it matches URLs that you intended to be matched by other routes. Чтобы избежать этой проблемы, такие универсальные маршруты следует помещать в конце таблицы маршрутов. Put the ‘greedy’ routes later in the route table to solve this.

Откат Fallback

В ходе обработки запроса MVC проверяет, можно ли найти контроллер и действие в приложении с помощью предоставленных значений маршрута. As part of request processing, MVC will verify that the route values can be used to find a controller and action in your application. Если нет действия, соответствующего значениям, маршрут считается не сопоставленным, и проверяется следующий маршрут. If the route values don’t match an action then the route isn’t considered a match, and the next route will be tried. Этот процесс называется откатом и призван упростить обработку случаев, когда маршруты на основе соглашений перекрываются. This is called fallback, and it’s intended to simplify cases where conventional routes overlap.

Разрешение неоднозначности действий Disambiguating actions

Если при маршрутизации найдены два соответствующих действия, платформа MVC должна устранить неоднозначность, выбрав наиболее подходящее из них, или создать исключение. When two actions match through routing, MVC must disambiguate to choose the ‘best’ candidate or else throw an exception. Например: For example:

Этот контроллер определяет два действия, которые соответствуют пути URL-адреса /Products/Edit/17 и маршрутизируют данные < controller = Products, action = Edit, >. This controller defines two actions that would match the URL path /Products/Edit/17 and route data < controller = Products, action = Edit, >. Это типичный шаблон для контроллеров MVC, в котором метод Edit(int) отображает форму для изменения сведений о продукте, а метод Edit(int, Product) обрабатывает отправленную форму. This is a typical pattern for MVC controllers where Edit(int) shows a form to edit a product, and Edit(int, Product) processes the posted form. Чтобы это было возможным, платформа MVC должна выбрать Edit(int, Product) для HTTP-запроса POST и Edit(int) для любой другой HTTP-команды. To make this possible MVC would need to choose Edit(int, Product) when the request is an HTTP POST and Edit(int) when the HTTP verb is anything else.

HttpPostAttribute ( [HttpPost] ) — это реализация интерфейса IActionConstraint , которая позволяет выбрать действие, только если HTTP-команда — POST . The HttpPostAttribute ( [HttpPost] ) is an implementation of IActionConstraint that will only allow the action to be selected when the HTTP verb is POST . Наличие интерфейса IActionConstraint делает метод Edit(int, Product) более подходящим вариантом, чем Edit(int) , поэтому Edit(int, Product) будет проверяться первым. The presence of an IActionConstraint makes the Edit(int, Product) a ‘better’ match than Edit(int) , so Edit(int, Product) will be tried first.

Пользовательские реализации IActionConstraint потребуется создавать только в особых ситуациях, однако важно понимать роль таких атрибутов, как HttpPostAttribute , — аналогичные атрибуты определены для других HTTP-команд. You will only need to write custom IActionConstraint implementations in specialized scenarios, but it’s important to understand the role of attributes like HttpPostAttribute — similar attributes are defined for other HTTP verbs. При маршрутизации на основе соглашений для действий часто используются одинаковые имена в рамках рабочего процесса show form -> submit form . In conventional routing it’s common for actions to use the same action name when they’re part of a show form -> submit form workflow. Удобство такого шаблона станет очевидным после ознакомления с разделом Сведения об интерфейсе IActionConstraint. The convenience of this pattern will become more apparent after reviewing the Understanding IActionConstraint section.

Если найдено несколько совпадений и MVC не может определить наиболее подходящий маршрут, создается исключение AmbiguousActionException . If multiple routes match, and MVC can’t find a ‘best’ route, it will throw an AmbiguousActionException .

Имена маршрутов Route names

Строки «blog» и «default» в следующих примерах представляют собой имена маршрутов: The strings «blog» and «default» in the following examples are route names:

Имя маршрута — это логическое имя, которое позволяет использовать именованный маршрут для формирования URL-адреса. The route names give the route a logical name so that the named route can be used for URL generation. Имена значительно упрощают создание URL-адресов, если оно представляет сложность из-за порядка маршрутов. This greatly simplifies URL creation when the ordering of routes could make URL generation complicated. Имена маршрутов должны быть уникальными в пределах приложения. Route names must be unique application-wide.

Имена маршрутов не влияют на сопоставление URL-адресов или обработку запросов; они служат только для формирования URL-адресов. Route names have no impact on URL matching or handling of requests; they’re used only for URL generation. В статье Маршрутизация приводятся более подробные сведения о формировании URL-адресов, в том числе во вспомогательных объектах MVC. Routing has more detailed information on URL generation including URL generation in MVC-specific helpers.

Маршрутизация с помощью атрибутов Attribute routing

При маршрутизации с помощью атрибутов используется набор атрибутов для сопоставления действий непосредственно с шаблонами маршрутов. Attribute routing uses a set of attributes to map actions directly to route templates. В приведенном ниже примере в методе Configure используется app.UseMvc(); , и маршрут не передается. In the following example, app.UseMvc(); is used in the Configure method and no route is passed. HomeController будет соответствовать набору URL-адресов, аналогичных тем, которым соответствует маршрут по умолчанию // : The HomeController will match a set of URLs similar to what the default route // would match:

Действие HomeController.Index() будет выполняться для любого из путей URL-адресов / , /Home или /Home/Index . The HomeController.Index() action will be executed for any of the URL paths / , /Home , or /Home/Index .

В этом примере показано ключевое различие между маршрутизацией с помощью атрибутов и маршрутизацией на основе соглашений. This example highlights a key programming difference between attribute routing and conventional routing. При использовании маршрутизации с помощью атрибутов для указания маршрута требуется больше входных данных; маршрут по умолчанию на основе соглашения более лаконичен. Attribute routing requires more input to specify a route; the conventional default route handles routes more succinctly. Однако маршрутизация с помощью атрибутов обеспечивает более точный контроль над тем, какие шаблоны маршрутов применяются к каждому действию, и требует такого контроля. However, attribute routing allows (and requires) precise control of which route templates apply to each action.

В случае с маршрутизацией с помощью атрибутов имя контроллера и имена действий не имеют значения при выборе действия. With attribute routing the controller name and action names play no role in which action is selected. В этом примере сопоставление будет производиться с теми же URL-адресами, что и в предыдущем. This example will match the same URLs as the previous example.

Приведенные выше шаблоны маршрутов не определяют параметры маршрутов для action , area и controller . The route templates above don’t define route parameters for action , area , and controller . По сути, эти параметры маршрутов не разрешены в маршрутах на основе атрибутов. In fact, these route parameters are not allowed in attribute routes. Так как шаблон маршрута уже связан с действием, не имеет смысла анализировать имя действия в URL-адресе. Since the route template is already associated with an action, it wouldn’t make sense to parse the action name from the URL.

Маршрутизация с помощью атрибутов Http[Verb] Attribute routing with Http[Verb] attributes

При маршрутизации с помощью атрибутов также могут использоваться атрибуты Http[Verb] , такие как HttpPostAttribute . Attribute routing can also make use of the Http[Verb] attributes such as HttpPostAttribute . Все эти атрибуты могут принимать шаблон маршрута. All of these attributes can accept a route template. В этом примере показаны два действия, которые совпадают с одним шаблоном маршрута: This example shows two actions that match the same route template:

Для такого пути URL-адреса, как /products , действие ProductsApi.ListProducts будет выполнено, если HTTP-командой является GET , а действие ProductsApi.CreateProduct будет выполнено, если HTTP-командой является POST . For a URL path like /products the ProductsApi.ListProducts action will be executed when the HTTP verb is GET and ProductsApi.CreateProduct will be executed when the HTTP verb is POST . При маршрутизации с помощью атрибутов URL-адрес сначала сопоставляется с набором шаблоном маршрутов, определяемых атрибутами маршрутов. Attribute routing first matches the URL against the set of route templates defined by route attributes. После того как найден соответствующий шаблон маршрута, применяются ограничения IActionConstraint для определения действий, которые могут быть выполнены. Once a route template matches, IActionConstraint constraints are applied to determine which actions can be executed.

При разработке REST API редко приходится использовать [Route(. )] для метода действия, так как действие принимает все методы HTTP. When building a REST API, it’s rare that you will want to use [Route(. )] on an action method as the action will accept all HTTP methods. Предпочтительнее применять более конкретные атрибуты Http*Verb*Attributes , чтобы точно определить поддерживаемые API возможности. It’s better to use the more specific Http*Verb*Attributes to be precise about what your API supports. Клиенты интерфейсов REST API должны знать, какие пути и HTTP-команды сопоставляются с определенными логическими операциями. Clients of REST APIs are expected to know what paths and HTTP verbs map to specific logical operations.

Так как маршрут на основе атрибутов применяется к определенному действию, можно легко сделать параметры обязательными в рамках определения шаблона маршрута. Since an attribute route applies to a specific action, it’s easy to make parameters required as part of the route template definition. В этом примере параметр id является обязательным в пути URL-адреса. In this example, id is required as part of the URL path.

Действие ProductsApi.GetProduct(int) будет выполнено для такого пути URL-адреса, как /products/3 , но не для такого пути URL-адреса, как /products . The ProductsApi.GetProduct(int) action will be executed for a URL path like /products/3 but not for a URL path like /products . Полное описание шаблонов маршрутов и связанных параметров см. в статье Маршрутизация. See Routing for a full description of route templates and related options.

Имя маршрута Route Name

В следующем коде определяется имя маршрута Products_List : The following code defines a route name of Products_List :

Имена маршрутов могут использоваться для формирования URL-адреса на основе определенного маршрута. Route names can be used to generate a URL based on a specific route. Они не влияют на то, как производится сопоставление URL-адресов при маршрутизации, и служат только для формирования URL-адресов. Route names have no impact on the URL matching behavior of routing and are only used for URL generation. Имена маршрутов должны быть уникальными в пределах приложения. Route names must be unique application-wide.

Сравните это поведение с маршрутом по умолчанию на основе соглашения, в котором параметр id определяется как необязательный ( ). Contrast this with the conventional default route, which defines the id parameter as optional ( ). Такая возможность точно указывать интерфейсы API имеет преимущества. Например, она позволяет направлять /products и /products/5 в разные действия. This ability to precisely specify APIs has advantages, such as allowing /products and /products/5 to be dispatched to different actions.

Объединение маршрутов Combining routes

Чтобы избежать лишних повторов при маршрутизации с помощью атрибутов, атрибуты маршрута для контроллера объединяются с атрибутами маршрута для отдельных действий. To make attribute routing less repetitive, route attributes on the controller are combined with route attributes on the individual actions. Все шаблоны маршрутов, определенные в контроллере, добавляются перед шаблонами маршрутов для действий. Any route templates defined on the controller are prepended to route templates on the actions. В результате добавления атрибута маршрута для контроллера все его действия будут использовать маршрутизацию с помощью атрибутов. Placing a route attribute on the controller makes all actions in the controller use attribute routing.

В этом примере путь URL-адреса /products может соответствовать ProductsApi.ListProducts , а путь URL-адреса /products/5 — ProductsApi.GetProduct(int) . In this example the URL path /products can match ProductsApi.ListProducts , and the URL path /products/5 can match ProductsApi.GetProduct(int) . Оба эти действия соответствуют только HTTP-запросу GET , так как они декорированы атрибутом HttpGetAttribute . Both of these actions only match HTTP GET because they’re decorated with the HttpGetAttribute .

Шаблоны маршрутов, применяемые к действию, которое начинается с символа / или

/ , не объединяются с шаблонами маршрутов, применяемыми к контроллеру. Route templates applied to an action that begin with / or

/ don’t get combined with route templates applied to the controller. Этот пример соответствует такому же набору путей URL-адресов, что и маршрут по умолчанию. This example matches a set of URL paths similar to the default route.

Упорядочение маршрутов на основе атрибутов Ordering attribute routes

В отличие от маршрутов на основе соглашений, которые выполняются в определенном порядке, для маршрутизации с помощью атрибутов формируется дерево, и все маршруты сопоставляются одновременно. In contrast to conventional routes which execute in a defined order, attribute routing builds a tree and matches all routes simultaneously. Это равносильно тому, как если бы записи маршрутов находились в идеальном порядке: наиболее конкретные маршруты имеют возможность выполнения перед более общими. This behaves as-if the route entries were placed in an ideal ordering; the most specific routes have a chance to execute before the more general routes.

Например, такой маршрут, как blog/search/ , является более конкретным по сравнению с blog/ <*article>. For example, a route like blog/search/ is more specific than a route like blog/ <*article>. С логической точки зрения, маршрут blog/search/ по умолчанию выполняется первым, так как это единственная разумная очередность. Logically speaking the blog/search/ route ‘runs’ first, by default, because that’s the only sensible ordering. При использовании маршрутизации на основе соглашений разработчик отвечает за расположение маршрутов в нужном порядке. Using conventional routing, the developer is responsible for placing routes in the desired order.

При маршрутизации с помощью атрибутов порядок может настраиваться с помощью свойства Order всех атрибутов маршрутов, предоставляемых платформой. Attribute routes can configure an order, using the Order property of all of the framework provided route attributes. Маршруты обрабатываются в порядке возрастания значения свойства Order . Routes are processed according to an ascending sort of the Order property. Порядок по умолчанию — 0 . The default order is 0 . Маршрут, для которого задано значение Order = -1 , будет выполняться перед маршрутами, для которых порядок не задан. Setting a route using Order = -1 will run before routes that don’t set an order. Маршрут, для которого задано значение Order = 1 , будет выполняться после маршрутов с порядком по умолчанию. Setting a route using Order = 1 will run after default route ordering.

Старайтесь не использовать свойство Order . Avoid depending on Order . Если для правильной маршрутизации в пространстве URL-адресов требуются явно заданные значения порядка, скорее всего, это будет вызывать путаницу и в среде клиентов. If your URL-space requires explicit order values to route correctly, then it’s likely confusing to clients as well. Как правило, при маршрутизации с помощью атрибутов правильный маршрут выбирается посредством сопоставления URL-адресов. In general attribute routing will select the correct route with URL matching. Если порядок по умолчанию для формирования URL-адресов не работает, использовать имя маршрута в качестве переопределения, как правило, проще, чем применять свойство Order . If the default order used for URL generation isn’t working, using route name as an override is usually simpler than applying the Order property.

Средства маршрутизации в Razor Pages и контроллере MVC имеют общую реализацию. Razor Pages routing and MVC controller routing share an implementation. Сведения о порядке маршрутизации в Razor Pages см. в статье Razor Pages route and app conventions in ASP.NET Core (Соглашения для маршрутизации и приложений Razor Pages в ASP.NET Core). Information on route order in the Razor Pages topics is available at Razor Pages route and app conventions: Route order.

Замена токенов в шаблонах маршрутов ([controller], [action], [area]) Token replacement in route templates ([controller], [action], [area])

Для удобства маршрута на основе атрибутов поддерживают замену токенов путем заключения токена в квадратные скобки ( [ , ] ). For convenience, attribute routes support token replacement by enclosing a token in square-braces ( [ , ] ). Токены [action] , [area] и [controller] заменяются значениями имени действия, имени области и имени контроллера из действия, в котором определен маршрут. The tokens [action] , [area] , and [controller] are replaced with the values of the action name, area name, and controller name from the action where the route is defined. В следующем примере действия могут соответствовать путям URL-адресов, как описано в комментариях: In the following example, the actions match URL paths as described in the comments:

Замена токенов происходит на последнем этапе создания маршрутов на основе атрибутов. Token replacement occurs as the last step of building the attribute routes. Приведенный выше пример будет работать так же, как следующий код: The above example will behave the same as the following code:

Маршруты на основе атрибутов могут также сочетаться с наследованием. Attribute routes can also be combined with inheritance. Эта возможность особенно эффективна при использовании вместе с заменой токенов. This is particularly powerful combined with token replacement.

Замена токенов также применяется к именам маршрутов, определенным в маршрутах на основе атрибутов. Token replacement also applies to route names defined by attribute routes. [Route(«[controller]/[action]», Name=»[controller]_[action]»)] создает уникальное имя маршрута для каждого действия. [Route(«[controller]/[action]», Name=»[controller]_[action]»)] generates a unique route name for each action.

Для сопоставления с литеральным разделителем замены токенов [ или ] его следует экранировать путем повтора символа ( [[ или ]] ). To match the literal token replacement delimiter [ or ] , escape it by repeating the character ( [[ or ]] ).

Использование преобразователя параметров для настройки замены токенов Use a parameter transformer to customize token replacement

Замену токенов можно настроить, используя преобразователь параметров. Token replacement can be customized using a parameter transformer. Преобразователь параметров реализует IOutboundParameterTransformer и преобразует значения параметров. A parameter transformer implements IOutboundParameterTransformer and transforms the value of parameters. Например, пользовательский преобразователь параметра SlugifyParameterTransformer изменяет значение маршрута SubscriptionManagement на subscription-management . For example, a custom SlugifyParameterTransformer parameter transformer changes the SubscriptionManagement route value to subscription-management .

RouteTokenTransformerConvention является соглашением для модели приложения, которое: The RouteTokenTransformerConvention is an application model convention that:

  • Применяет преобразователь параметров ко всем маршрутам атрибута в приложении. Applies a parameter transformer to all attribute routes in an application.
  • Настраивает значения токена маршрут атрибута при замене. Customizes the attribute route token values as they are replaced.

RouteTokenTransformerConvention регистрируется в качестве параметра в ConfigureServices . The RouteTokenTransformerConvention is registered as an option in ConfigureServices .

Несколько маршрутов Multiple Routes

Маршрутизация с помощью атрибутов поддерживает определение нескольких маршрутов к одному и тому же действию. Attribute routing supports defining multiple routes that reach the same action. Наиболее распространенный случай использования этой возможности — имитация поведения маршрута по умолчанию на основе соглашения, как показано в следующем примере: The most common usage of this is to mimic the behavior of the default conventional route as shown in the following example:

Добавление нескольких атрибутов маршрута для контроллера означает, что каждый из них будет объединяться с каждым из атрибутов маршрута, определенных для методов действий. Putting multiple route attributes on the controller means that each one will combine with each of the route attributes on the action methods.

Если несколько атрибутов маршрута (реализующих интерфейс IActionConstraint ) добавлены для действия, каждое ограничение действия объединяется с шаблоном маршрута из атрибута, в котором оно определено. When multiple route attributes (that implement IActionConstraint ) are placed on an action, then each action constraint combines with the route template from the attribute that defined it.

Хотя использование нескольких маршрутов к действиям может показаться очень эффективной возможностью, лучше, чтобы пространство URL-адресов приложения оставалось простым и четко организованным. While using multiple routes on actions can seem powerful, it’s better to keep your application’s URL space simple and well-defined. Используйте несколько маршрутов к действиям только там, где это необходимо, например для поддержки существующих клиентов. Use multiple routes on actions only where needed, for example to support existing clients.

Задание необязательных параметров, значений по умолчанию и ограничений для маршрутов на основе атрибутов Specifying attribute route optional parameters, default values, and constraints

Маршруты на основе атрибутов поддерживают тот же синтаксис для указания необязательных параметров, значений по умолчанию и ограничений, что и маршруты на основе соглашений. Attribute routes support the same inline syntax as conventional routes to specify optional parameters, default values, and constraints.

Подробное описание синтаксиса шаблона маршрута см. в разделе Справочник по шаблону маршрута. See Route Template Reference for a detailed description of route template syntax.

Пользовательские атрибуты маршрута с использованием IRouteTemplateProvider Custom route attributes using IRouteTemplateProvider

Все атрибуты маршрутов, предоставляемые платформой ( [Route(. )] , [HttpGet(. )] и т. д.), реализуют интерфейс IRouteTemplateProvider . All of the route attributes provided in the framework ( [Route(. )] , [HttpGet(. )] , etc.) implement the IRouteTemplateProvider interface. MVC ищет атрибуты в классах контроллеров и методах действий при запуске приложения и использует те из них, которые реализуют интерфейс IRouteTemplateProvider , для формирования начального набора маршрутов. MVC looks for attributes on controller classes and action methods when the app starts and uses the ones that implement IRouteTemplateProvider to build the initial set of routes.

Вы можете реализовать интерфейс IRouteTemplateProvider для определения собственных атрибутов маршрутов. You can implement IRouteTemplateProvider to define your own route attributes. Каждая реализация IRouteTemplateProvider позволяет определить один маршрут с пользовательским шаблоном маршрута, порядком и именем. Each IRouteTemplateProvider allows you to define a single route with a custom route template, order, and name:

Атрибут в приведенном выше примере автоматически присваивает шаблону Template значение «api/[controller]» при применении [MyApiController] . The attribute from the above example automatically sets the Template to «api/[controller]» when [MyApiController] is applied.

Настройка маршрутов на основе атрибутов с помощью модели приложения Using Application Model to customize attribute routes

Модель приложения — это объектная модель, которая создается при запуске со всеми метаданными, используемыми платформой MVC для маршрутизации и выполнения действий. The application model is an object model created at startup with all of the metadata used by MVC to route and execute your actions. Модель приложения включает в себя все данные, собранные из атрибутов маршрутов (посредством интерфейса IRouteTemplateProvider ). The application model includes all of the data gathered from route attributes (through IRouteTemplateProvider ). Вы можете создать соглашения, чтобы изменить модель приложения при запуске с целью настройки маршрутизации. You can write conventions to modify the application model at startup time to customize how routing behaves. В этом разделе приводится простой пример настройки маршрутизации с помощью модели приложения. This section shows a simple example of customizing routing using application model.

Смешанная маршрутизация с помощью атрибутов и маршрутизация на основе соглашений Mixed routing: Attribute routing vs conventional routing

В приложениях MVC маршрутизация с помощью атрибутов и маршрутизация на основе соглашений могут использоваться вместе. MVC applications can mix the use of conventional routing and attribute routing. Маршруты на основе соглашений часто применяются для контроллеров, предоставляющих HTML-страницы для браузеров, а маршруты на основе атрибутов — для контроллеров, предоставляющих интерфейсы REST API. It’s typical to use conventional routes for controllers serving HTML pages for browsers, and attribute routing for controllers serving REST APIs.

Действия маршрутизируются либо на основе соглашений, либо с помощью атрибутов. Actions are either conventionally routed or attribute routed. При добавлении маршрута к контроллеру или действию они становятся маршрутизируемыми с помощью атрибутов. Placing a route on the controller or the action makes it attribute routed. Действия, определяющие маршруты на основе атрибутов, недоступны по маршрутам на основе соглашений, и наоборот. Actions that define attribute routes cannot be reached through the conventional routes and vice-versa. Любой атрибут маршрута контроллера делает все действия в атрибуте контроллера маршрутизируемыми. Any route attribute on the controller makes all actions in the controller attribute routed.

Два типа систем маршрутизации отличает процесс, выполняемый после нахождения URL-адреса, соответствующего шаблону маршрута. What distinguishes the two types of routing systems is the process applied after a URL matches a route template. При маршрутизации на основе соглашений значения маршрута из соответствия используются для выбора действия и контроллера из таблицы подстановки, содержащей все действия с маршрутизацией на основе соглашений. In conventional routing, the route values from the match are used to choose the action and controller from a lookup table of all conventional routed actions. При маршрутизации с помощью атрибутов каждый шаблон уже связан с действием, и дальнейшая подстановка не требуется. In attribute routing, each template is already associated with an action, and no further lookup is needed.

Сложные сегменты Complex segments

Сложные сегменты (например, [Route(«/dogcat»)] ) обрабатываются путем «нежадного» сопоставления литералов справа налево. Complex segments (for example, [Route(«/dogcat»)] ), are processed by matching up literals from right to left in a non-greedy way. Описание см. в исходном коде. See the source code for a description. Дополнительные сведения см. в этой проблеме. For more information, see this issue.

Формирование URL-адреса URL Generation

Приложения MVC могут использовать функции формирования URL-адреса, предоставляемые системой маршрутизации, для создания URL-ссылок на действия. MVC applications can use routing’s URL generation features to generate URL links to actions. Формирование URL-адресов устраняет необходимость в их жестком задании, что делает код надежнее и проще в обслуживании. Generating URLs eliminates hardcoding URLs, making your code more robust and maintainable. В этом разделе рассматриваются функции формирования URL-адреса, предоставляемые платформой MVC, и описываются лишь базовые принципы их работы. This section focuses on the URL generation features provided by MVC and will only cover basics of how URL generation works. Подробное описание формирования URL-адреса см. в статье Маршрутизация. See Routing for a detailed description of URL generation.

Интерфейс IUrlHelper — это базовый компонент инфраструктуры, обеспечивающий взаимодействие между MVC и системой маршрутизации для формирования URL-адресов. The IUrlHelper interface is the underlying piece of infrastructure between MVC and routing for URL generation. Доступ к экземпляру IUrlHelper в контроллерах, представлениях и компонентах представлений можно получить посредством свойства Url . You’ll find an instance of IUrlHelper available through the Url property in controllers, views, and view components.

В этом примере интерфейс IUrlHelper используется посредством свойства Controller.Url для формирования URL-адреса другого действия. In this example, the IUrlHelper interface is used through the Controller.Url property to generate a URL to another action.

Если в приложении применяется маршрут по умолчанию на основе соглашения, значением переменной url будет строка с путем URL-адреса /UrlGeneration/Destination . If the application is using the default conventional route, the value of the url variable will be the URL path string /UrlGeneration/Destination . Этот путь URL-адреса создается системой маршрутизации путем объединения значений маршрута из текущего запроса (значения окружения) со значениями, переданными в Url.Action , и подстановки этих значений в шаблон маршрута. This URL path is created by routing by combining the route values from the current request (ambient values), with the values passed to Url.Action and substituting those values into the route template:

Значение каждого параметра маршрута в шаблоне маршрута заменяется соответствующими именами со значениями и значениями окружения. Each route parameter in the route template has its value substituted by matching names with the values and ambient values. Параметр маршрута, у которого нет значения, может принимать значение по умолчанию, если оно имеется, или пропускаться, если он является необязательным (как в случае с параметром id в этом примере). A route parameter that doesn’t have a value can use a default value if it has one, or be skipped if it’s optional (as in the case of id in this example). Сформировать URL-адрес не удастся, если у любого из обязательных параметров маршрута не будет соответствующего значения. URL generation will fail if any required route parameter doesn’t have a corresponding value. Если для маршрута не удалось сформировать URL-адрес, проверяется следующий маршрут, пока не будут проверены все маршруты или не будет найдено соответствие. If URL generation fails for a route, the next route is tried until all routes have been tried or a match is found.

В примере Url.Action выше предполагается использование маршрутизации на основе соглашений, однако формирование URL-адреса происходит аналогичным образом и в случае с маршрутизацией с помощью атрибутов, хотя принципы иные. The example of Url.Action above assumes conventional routing, but URL generation works similarly with attribute routing, though the concepts are different. При применении маршрутизации на основе соглашений шаблон расширяется с помощью значений маршрута, и значения маршрута для controller и action обычно находятся в этом шаблоне. Это возможно по той причине, что URL-адреса, сопоставленные системой маршрутизации, следуют соглашению. With conventional routing, the route values are used to expand a template, and the route values for controller and action usually appear in that template — this works because the URLs matched by routing adhere to a convention. При маршрутизации с помощью атрибутов значения маршрута для controller и action не могут находиться в шаблоне. Вместо этого они применяются для поиска нужного шаблона. In attribute routing, the route values for controller and action are not allowed to appear in the template — they’re instead used to look up which template to use.

В этом примере используется маршрутизация с помощью атрибутов: This example uses attribute routing:

MVC создает таблицу подстановки, содержащую все действия с маршрутизацией с помощью атрибутов, и сопоставляет значения controller и action для выбора шаблона маршрута, с помощью которого должен формироваться URL-адрес. MVC builds a lookup table of all attribute routed actions and will match the controller and action values to select the route template to use for URL generation. В приведенном выше примере создается URL-адрес custom/url/to/destination . In the sample above, custom/url/to/destination is generated.

Файл .htaccess: редирект, доступ, кодировка, ошибки

Информация, приведенная ниже, скопирована с огромного количества разных сайтов для личного использования. 80% информации проверено, работает.

Как создать файл .htaccess

Очень просто. Открываем блокнот — “Сохранить как..” — в открывшемся окошке выбрать “Тип файла: все файлы” а имя: .htaccess

С помощью этого файла производится настройка Apache сервера. Файл имеет воистину почти неограниченные возможности.

Вот лишь некоторые из них:

Редирект через .htaccess

Если нужно перенаправление с любого url сайта, то пишем:

# http://www.example.com — URL На который мы перенаправляем запросы

Редирект с отдельных страниц сайта прописавают так:



Redirect /linux http://www.linux.org


Redirect /linux/download.html http://www.linux.org/dist/download_info.html


Redirect 301 /kernel http://www.linux.org


302 редирект (временно)

Страницы ошибок .htaccess 404

Обработка кодов ответов Web-сервера Apache

И выдача своей страницы пользователю
Индексные страницы .htaccess index

DirectoryIndex index.php index.shtml index.html

Сначала ищет 1ю указанную страницу, затем вторую и т.д.
ОДНА ИНДЕКСНАЯ СТРАНИЦА ВМЕСТО ЧЕТЫРЕХ
или склеить урл сайта .htaccess

http://site.ru/index.html
Прописать в файле .htaccess:

Запрет на отображение содержимого каталога

при отсутствии индексного файла

Выполнять код PHP в файлах HTML, XML, ASP

RemoveHandler .html .htm


AddType application/x-httpd-php .php .htm .html .phtml

А также XML- или ASP-файлы, которые будут вести себя как PHP-файлы:

AddHandler application/x-httpd-php .xml


AddHandler application/x-httpd-php .asp

Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP
Настройка кодировки файлов на сервере через .htaccess

отправляется браузеру в заголовке Content-Type и переключает на указанную кодировку

Задание кодировки загружаемых файлов

Отключение директивы MultiViews

Включённая на хостинге опция MultiViews может вызвать неожиданные проблемы, например, отображение несуществующих страниц сайта. Допустим, на сайте существует страница с адресом http://www.ваш сайт.ru/down.php, и если посетители обратятся к несуществующему каталогу http://www.ваш сайт.ru/down/, то включённая опция MultiViews вместо этого каталога подставит файл down.php. Однако подстановка будет выполнена не полностью — пути к изображениям, таблицам стилей и т.п. будут подставлены неверно. То есть страница будет отображена с искажениями. Для подавления такого поведения Apache опцию MultiViews следует отключить.

Options -MultiViews
Глобальное перенаправление на новый адрес

Перенаправление при обращении к определённому файлу

Redirect /books/index.php http://www.ваш сайт.ru/newbooks/

Перенаправление при обращении к любым страницам каталога

Перенаправление при обращении к любым страницам сайта

ЗАПРЕТ ИНДЕКСАЦИИ ПОИСКОВИКАМИ ФАЙЛОВ .TXT

Запрет просмотра каталога с помощью файла .htaccess

Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:

И наоборот, вы можете разрешить просмотр каталога, встроив его в стандартный интерфейс сайта директивой

Защита от хотлинков

#домены, которые могут ссылаться на картинки с вашего сайта

#не показывать картинки при хотлинках

RewriteRule \.(jpg|png|gif)$ http://yoursitename.ru/images/imagename.jpg

[NC,R,L]
Принудительно сохранение файла вместо открытия

Если хотите, чтобы посетители вместо просматра файла онлайн сохраняли его, то в .htaccess пишем:

AddType application/octet-stream .doc .mov .avi .pdf .xls .mp4

#кэширование html и htm на сутки

#кэширование css, javascript и txt-файлов на неделю

#кэширование flash и картинок на месяц

#запрет на кэширование скриптов

Параметр max-age приведен в секундах.
Запрет на доступ к файлу .htaccess

Например, это может быть ваш .htaccess

RewriteEngine – ключ к запуску модуля.
RewriteBase указывает “глобальность” наших изменений (если используется знак «/», значит, настройки будут применены к текущей директории).

Директива RewriteCond ставит условие, при истинности которого будет исполняться наша настройка. В состав этой директивы входит проверочная строка. В данном случае используем переменную сервера %, которая выводит юзер-агенты программ, обращающихся к серверу. Далее идёт значение этой переменной, разделённое регулярным выражением ^ начала строки.
RewriteRule выполняет нашу настройку. В данном случае мы запрещаем доступ к серверу. Делается это при помощи регулярных выражений начала строки ^ и конца строки $, а также флага вида действия — [F] (его значение в данном случае FORBIDDEN).

[OR] используется в случае, если у нас несколько условий обработки действий роботов.

В данном случае робот с юзер-агентом Googlebot (сканирующий робот поисковой системы Google) не сможет получить доступ к сайту. На месте Googlebot можно написать любой юзер-агент программы или робота, которого вы не хотите видеть у себя. Здесь же можно указать и юзер-агенты известных программ-сборщиков спама типа EmailSiphon или ExtractorPro.
запретить доступ сразу нескольким роботам

RewriteEngine on
RewriteBase /
RewriteCond % ^ Googlebot [OR]
RewriteCond % ^ Yandex
RewriteRule ^.*$ — [F]

Как сделать переадресацию сайта.

При разработке разнообразных по сложности сайтов рано или поздно требуется применение редиректов. Например, для обновления страницы чата или онлайн-трансляции, для перенаправления на правильный адрес в случае «переезда» страницы и т. п. Правильное использование редиректов или обновления страниц может сделать работу сайта более эффективной и удобной для пользователей.Редирект (от англ. redirect) — переориентация, перенаправление пользователя на другую страницу сайта. Обычно под редиректом подразумевается автоматическая переадресация, без участия пользователя. Редиректом могут называть программное решение (скрипт), которое принудительно перенаправляет пользователя с посещаемой страницы на другую.

Когда полезно применять редирект.

  • При переносе сайта на новый домен. Посетителей сайта по старому адресу, желательно, автоматически перенаправлять на другой домен;
  • При перемещении страниц или разделов сайта. Редирект применяется для переадресации пользователей на новый, правильный адрес страницы или раздела. Очень важно для сохранения целостности сайта и доступности информации;
  • Для периодического обновления страницы. Обновление страницы, своего рода частный случай редиректа страницы на саму себя, но с задержкой по времени! Полезная возможность на сайтах с текстовыми онлай-трансляциями, чатах.
  • При продвижении сайта. Редирект может применяться, например, для ускорения «склейки» адресов страниц сайта с префиксом www и без него;

Аккуратное и правильное использование 301-го редиректа старых страниц на новые или старого сайта на новый адрес, позволяет сохранить позиции сайта в поисковых системах. Использование 301-го редиректа передаёт PageRank страницы на новый адрес.

Допустим у нас был раскрученный сайт с большим числом посетителей. Затем сайт был перемещён на новый домен. Поисковая система его ещё не знает. 301 редирект позволяет как бы “склеить” старый и новый адрес, сохранив при этом все те элементы оптимизации, которые были сделаны для этого сайта, тем самым сохранив посещаемость и аудиторию самого сайта.

Также можно использовать редирект для того, чтобы скрыть Вашу партнерскую ссылку и тем самым сохранить ваши комиссионные. Обычно партнерская ссылка содержит Ваш идентификатор партнера, по которому программное обеспечение партнерской программы определяет и засчитывает продажи по Вашей рекомендации. Бывает так, что пользователи по незнанию или по какому-то непонятному намерению отрезают “хвост” вашей партнерской ссылки с Вашим идентификатором и переходят на сайт по прямому адресу.

Давайте перейдем к главному вопросу. Как сделать эту самую переадресацию redirect сайта?

Способы реализации переадресации сайтов.

  • Простой редирект (в файле .htaccess или httpd.conf для Apache)
  • Использование mod_rewrite для переадресации
  • Редирект на PHP
  • Редирект на ASP
  • Редирект на ASP.NET
  • Редирект с помощью meta refresh
  • Редирект с помощью «JavaScript»

Редирект средствами .htaccess

Директивы, прописанные в файле .htaccess обрабатываются сервером «Apache». Приведём несколько рабочих примеров переадресации:

1.Redirect 301 / https://www.seoklub.ru/
2.RedirectPermanent / https://www.seoklub.ru/
3.Redirect 302 / https://www.seoklub.ru/

Более сложные решения, но очень полезные, можно использовать при подключенном модуле «Apache» — mod_rewrite. Команды для модуля mod_rewrite прописываются в файле .htaccess.

Пример содержимого файла .htaccess с использованием mod_rewrite:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) https://www.seoklub.ru/$1 [R=301,L]

Если этот файл .htaccess разместить на другом домене, то любые запросы будут автоматически перенаправляться 301-м редиректом на сайт www.vashmaster.ru. Адрес посещённой страницы будет сохранён. Подобный редирект можно использовать с купленных «пиаристых» доменов, например, для передачи PR своему основному сайту.

301-й редирект называют безопасным! Данный редирект сообщает, что страница навсегда перенесена на новый адрес. Этот факт хорошо определяется поисковыми системами и практически все поисковые параметры старой страницы передаются новой. Например, такие факторы как ссылочное, PR и т. п. При 301-м редиректе страница на новом адресе как правило не теряет свои позиции в поисковых системах, что делает подобные переносы страниц и разделов сайта незаметными для посетителей и без ущерба трафику из поисковых систем.

Редирект на PHP

Как мы уже заметили ранее, для выполнения редиректа скрипт на сервере должен отправить в браузер посетителя специальный заголовок. В языке программирования PHP отправку заголовков с редиректом можно сделать с помощью функции header().

Редирект на ASP

Редирект на ASP.NET

Редирект с помощью meta refresh

где 0 – задержка переадресации в секундах, newdomain.com -страница, куда переадресуем. Некоторые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя, на мой взгляд это уже не актуально. Такой редирект не сможет склеить ваши сайты (с www и без) и передать PR, так как игнорируется поисковыми системами. Он возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому ее стоит применять только для страниц, которые не будут индексироваться.

Редирект с помощью JavaScript

Варианты переадресации на JavaScript чаще реализуются с использованием функции setTimeout(‘функция’, задержка). Например, автоматически сделать Click на кнопке “Submit” формы “searchform” через 0.1 сек после загрузки кода:

На кнопку “Submit” можно повесить любое действие, например, открыть новый url в этом окне.

Чтобы просто переадресовать на другую страницу можно вставить после один из вариантов кода на JavaScript:

?location=”http://www.newdomain.com”;
?document.location.href=”http://www.newdomain.com”;
?window.location.reload(“http://www.newdomain.com”);
?document.location.replace(“http://www.newdomain.com”);

В последнем случае уже нельзя будет вернуться на страницу выполнившую переадресацию, так как ее адрес стирается из history, что иногда нужно.

Заключение. Безопасный способ редиректа старых страниц на новые или старого сайта на новый адрес, с сохранением позиций в поисковых системах, заключается в использование 301 редиректа, который также позволит вам передать старый Page Rank страницы на новый сайт.

MS-DOS, как получить вывод команды как переменной

Я написал программу, которая возвращает коды ключей как целые числа для DOS, но я не знаю, как получить ее вывод как переменную.

Примечание. Я использую MS-DOS 7/Windows 98, поэтому я не могу использовать FOR/F или SET/P

Кто-нибудь знает, как я могу это сделать?

Несколько решений описаны здесь Эриком Пейнсом. Однако для более старых версий cmd автор был вынужден использовать внешние инструменты.

Например, программные инструменты, такие как STRINGS от Douglas Boling, позволяют использовать следующий код:

echo Greetings! | STRINGS hi=ASK # puts «Greetings!» into %hi%

То же самое касается ASET Ричарда Брейера:

echo Greetings! | ASET hi=line # puts «Greetings!» into %hi%

Один из альтернативных чистых решений DOS требует, чтобы выход программы был перенаправлен в файл (названный ANSWER.DAT в примере ниже), а затем использует специально подготовленный командный файл. Чтобы привести вышеупомянутую страницу:

[I] n командный файл, который нам нужен, чтобы выпустить set MYVAR= команд set MYVAR= . Это сложная задача, поскольку MS-DOS не предлагает простой способ добавить «set MYVAR=» в файл [. ]

Обычные текстовые файлы DOS и командные файлы заканчивают все строки двумя последовательными байтами: возврат каретки ( Ctrl-M , hex 0D или ASCII 13) и перевод строки ( Ctrl-J , hex 0A или ASCII 10). В пакетном файле вы должны иметь возможность вставлять Ctrl-J в середину строки.

У многих текстовых редакторов есть способ сделать это: через Ctrl-P , а затем Ctrl-J (DOS EDIT с Win95/98, VDE) с помощью префикса Ctrl-Q (Emacs, PFE) через прямой ввод с ALT и цифровая клавиатура (QEdit, Multi-Edit) или с помощью назначенной функциональной клавиши (Boxer). Другие редакторы абсолютно не поддерживают это (Notepad, Editpad, EDIT от MS-DOS 6.22 или ранее, VIM может вставлять переводы строк только в двоичном режиме, но не в нормальном текстовом режиме).

Если вы можете это сделать, пакетный файл может выглядеть так:

Где вы видите ^ J на строке 3 выше, в этом месте должна быть встроена строка перевода. Ваш редактор может отображать его как квадратную коробку со встроенным кругом.

Операционная система MS-DOS. Основные команды MS-DOS.

Цель: Научиться применять основные команды MS-DOS.

Оборудование: персональный компьютер,

Место проведения:Компьютерный класс.

Операционная система (ОС) MS-DOS персональная не сетевая операционная система, предназначенная для использования на IBM — совместимых компьютерах.

ОС MS-DOS предназначена для организации диалога с пользователем, удобного доступа к аппаратным ресурсам компьютера и управления выполнением программ.

ОС MS-DOS разработана корпорацией Microsoft. Существуют различные клоны MS-DOS разработанные другими фирмами (PC-DOS, DR-DOS, Novell DOS).

ОС MS-DOS до середины 90-х годов являлась самой распространенной и популярной ОС для ПК. Сейчас как функционирующая операционная система для ПК MS DOS ушла в историю, хотя имеет ограниченное применение в ряде промышленных систем во встроенных управляющих компьютерах в случае, если не имеют места жесткие требования по времени и т.п.

Тем не менее, ряд концепций, реализованных в MS DOS, является базовым и поныне. Именно с этих позиций она и рассматривается в лабораторной работе.

Основные функции ОС MS-DOS:

а) возможность организации многоуровневых каталогов;

б) возможность работы с различными периферийными устройствами, с использованием драйверов этих устройств;

в) автоматическое распределение основной памяти;

г) возможность запуска фоновой задачи, одновременно с диалоговой работой пользователя;

д) возможность пакетной обработки данных команд управления.

Компоненты ОС MS-DOS:

MS-DOS имеет три основные составляющие: IO.SYS; MSDOS.SYS; COMMAND.COM.

Программы, хранящиеся в файле IO.SYS (Input/Output), обеспечивают обмен информаций с внешними устройствами (операции ввода-вывода).

Файл MSDOS.SYS содержит программы, которые управляют работой накопителей на гибком магнитном диске и программы, позволяющие создавать файлы. Программы этого файла также следят за использованием оперативной памяти компьютера прикладными программами.

Файл COMMAND.COM (интерпретатор команд, или командный процессор) предназначен исключительно для пользователя. Он содержит все так называемые внутренние (резидентные) команды. Пользователю они доступны в течение всего времени, пока файл COMMAND.COM находится в памяти машины.

Кроме этих трех основных файлов, операционная система содержит различное количество более или менее крупных программ, составляющих так называемые внешние команды. Их часто называют обслуживающими программами или утилитами. Они представлены файлами типа exe или com, располагаются на диске и находятся в памяти машины только в течение времени, необходимого для их выполнения, поэтому к моменту запуска соответствующей команды нужно, чтобы содержащий команду диск находился на считывающем устройстве и был готов к считыванию, иначе будет выдано сообщение об ошибке: Bad command or file name (ошибочная команда или файл).

Диалог с пользователем:

Пользователь взаимодействует с системой посредством набора команд ОС в командной строке. Команды набираются только при наличии приглашения вида:

Текст команды следует сразу за знаком приглашения >. Ввод команды заканчивается нажатием клавиши Enter.

Структура команд MS DOS:

Параметры разделяются пробелами и соответствуют входам и выходам команды. Ключи определяют режимы работы команды. Каждому ключу предшествует знак /. Количество и смысл параметров и ключей определяется описанием команды.

Для прекращения выполнения команды следует набрать комбинацию Ctrl-C или Ctrl-Break.

Комбинация Ctrl-S приостанавливает выдачу результатов команды; повторное ее нажатие возобновляет выдачу.

Чтобы получить справочные сведения о какой-либо команде, следует набрать за именем команды комбинацию /?.

Принципы работы с командной строкой одинаковы в различных ОС (например, в ОС Unix). Кроме того, в целом ряде достаточно специальных, но важных ситуаций использование командной строки остается актуальным и не имеет альтернатив по эффективности (так, в первую очередь это касается работы с сервером в сети).

Соотношение MS-DOS и ОС Windows:

Все версии Windows до версий Windows NT и Windows 95 работали как надстройки над MS-DOS, то есть фактически были более или менее красочными графическими пользовательскими оболочками. Эта ситуация начала меняться с выпуском Windows 3.1 и Windows для рабочих групп 3.11. В Windows 95 этот процесс пошел еще дальше, и все стало в точности наоборот. Сейчас сеанс MS-DOS является одним из многих стандартных приложений Windows. Схематически это изображено на рисунке ниже.

Файлы с системными программами MS-DOS находятся в каталогах ОС Windows, однако начиная с Windows 98 если за ними и сохранены какие-то системные функции, то скорее в силу исторической преемственности ОС.

Почему изучение MS-DOS остается актуальным:

Понятия, введенные для работы с файлами, организация их хранения и соглашения о файлах, используемые в MS-DOS, рациональны, естественны и остались практически неизменными. Они сохранили роль базового понятийного аппарата.

Ведущие сетевые ОС типа Unix, в отличие от Windows, исходно не имеют графического пользовательского интерфейса (GUI, Graphic User Interface). Более того, для системных сетевых разработок он не актуален. Принципы же построения команд и работы с системой команд одинаковы для MS-DOS и Unix. Освоив первые, создадим базу для освоения вторых.

Огромную роль играет концепция файловых оболочек (файловых менеджеров), наиболее известной из которых является Norton Commander для MS-DOS (1986 г.). Можно сказать, что ее появление соизмеримо с появлением самой MS-DOS и Windows. Идея и реализация оказались настолько жизнеспособными, что остаются не менее актуальными и поныне.

Такого рода оболочки существуют и разрабатываются и для современных ОС (NCW, Windows Commander, Far Manager и др.). Профессиональные программисты однозначно отдают им предпочтение перед проводником Windows. В итоге файловые оболочки (наследие MS-DOS) и специфические инструменты Windows сосуществуют, органично дополняя друг друга.

В профессиональной программистской деятельности часто возникает необходимость в запуске небольших информационных программ, объективно не требующих графического интерфейса (даже файлового менеджера). К таким программам относятся, например, ipconfig.exe (определение сетевого ip-адреса машины), arp.exe (назначение сетевых карт и адресов), at.exe (назначение задания для выполнения), ping.exe (проверка прохождения пакетов в сети) и т. п. В этом случае работа с простой командной строкой оказывается более рациональной.

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

Перечень основных команд:

ASSOC Вывод либо изменение сопоставлений по расширениям имен файлов.

AT Выполнение команд и запуск программ по расписанию.

ATTRIB Отображение и изменение атрибутов файлов.

BREAK Включение/выключение режима обработки комбинации клавиш CTRL+C.

CACLS Отображение/редактирование списков управления доступом (ACL) к файлам.

CALL Вызов одного пакетного файла из другого.

1. CD Вывод имени либо смена текущей папки.

CHCP Вывод либо установка активной кодовой страницы.

CHDIR Вывод имени либо смена текущей папки.

CHKDSK Проверка диска и вывод статистики.

CHKNTFS Отображение или изменение выполнения проверки диска во время загрузки.

CLS Очистка экрана.

CMD Запуск еще одного интерпретатора командных строк Windows.

COLOR Установка цвета текста и фона, используемых по умолчанию.

COMP Сравнение содержимого двух файлов или двух наборов файлов.

COMPACT Отображение/изменение сжатия файлов в разделах NTFS.

CONVERT Преобразование дисковых томов FAT в NTFS. Нельзя выполнить

преобразование текущего активного диска.

2. COPY Копирование одного или нескольких файлов в другое место.

3. DATE Вывод либо установка текущей даты.

4. DEL Удаление одного или нескольких файлов.

5. DIR Вывод списка файлов и подпапок из указанной папки.

DISKCOMP Сравнение содержимого двух гибких дисков.

DISKCOPY Копирование содержимого одного гибкого диска на другой.

DOSKEY Редактирование и повторный вызов командных строк; создание макросов.

ECHO Вывод сообщений и переключение режима отображения команд на экране.

ENDLOCAL Конец локальных изменений среды для пакетного файла.

ERASE Удаление одного или нескольких файлов.

EXIT Завершение работы программы CMD.EXE (интерпретатора командных строк).

FC Сравнение двух файлов или двух наборов файлов и вывод различий между

6. FIND Поиск текстовой строки в одном или нескольких файлах.

FINDSTR Поиск строк в файлах.

FOR Запуск указанной команды для каждого из файлов в наборе.

FORMAT Форматирование диска для работы с Windows.

FTYPE Вывод либо изменение типов файлов, используемых при сопоставлении по

расширениям имен файлов.

GOTO Передача управления в отмеченную строку пакетного файла.

GRAFTABL Позволяет Windows отображать расширенный набор символов в графическом

HELP Выводит справочную информацию о командах Windows.

IF Оператор условного выполнения команд в пакетном файле.

LABEL Создание, изменение и удаление меток тома для дисков.

7. MD Создание папки.

8. MKDIR Создание папки.

MODE Конфигурирование системных устройств.

MORE Последовательный вывод данных по частям размером в один экран.

MOVE Перемещение одного или нескольких файлов из одной папки в другую.

PATH Вывод либо установка пути поиска исполняемых файлов.

PAUSE Приостановка выполнения пакетного файла и вывод сообщения.

POPD Восстановление предыдущего значения текущей активной папки,

сохраненного с помощью команды PUSHD.

9. PRINT Вывод на печать содержимого текстовых файлов.

PROMPT Изменение приглашения в командной строке Windows.

PUSHD Сохранение значения текущей активной папки и переход к другой папке.

10. RD Удаление папки.

RECOVER Восстановление читаемой информации с плохого или поврежденного диска.

11. REM Помещение комментариев в пакетные файлы и файл CONFIG.SYS.

12. REN Переименование файлов и папок.

13. RENAME Переименование файлов и папок.

REPLACE Замещение файлов.

14. RMDIR Удаление папки.

SET Вывод, установка и удаление переменных среды Windows.

SETLOCAL Начало локальных изменений среды для пакетного файла.

SHIFT Изменение содержимого (сдвиг) подставляемых параметров для пакетного

SORT Сортировка ввода.

START Запуск программы или команды в отдельном окне.

SUBST Сопоставляет заданному пути имя диска.

15. TIME Вывод и установка системного времени.

TITLE Назначение заголовка окна для текущего сеанса интерпретатора

командных строк CMD.EXE.

16. TREE Графическое отображение структуры папок заданного диска или заданной

17. TYPE Вывод на экран содержимого текстовых файлов.

18. VER Вывод сведений о версии Windows.

VERIFY Установка режима проверки правильности записи файлов на диск.

VOL Вывод метки и серийного номера тома для диска.

19. XCOPY Копирование файлов и дерева папок.

Для получения сведений об определенной команде наберите HELP [имя команды]

В Windows функции системных программ MS-DOS эмулируются соответствующим приложением — это приложение носит название «Командная строка».

1. Запустить эмуляцию режима MS DOS. Для этого ввести в командной строке меню ПУСК->ВЫПОЛНИТЬ команду CMD

воспользоваться командой КОМАНДНАЯ СТРОКА из меню ПУСК->ПРОГРАММЫ->СТАНДАРТНЫЕ

2. Вызовите справку по перечню команд поддерживаемых интерпретатором. C:\>HELP

3. Запишите в отчете подробную справку по команде соответствующей номеру компьютера за которым Вы работаете.

Например, Вы сидите за компьютером под номером 5, значит, в отчете записываете справку по команде DIR.

4. Выполните команды представленные ниже. Запишите (зарисуйте) результат выполнения команд в отчете.

4.1. Создать каталог в соответствии с деревом каталогов. (MD- создать, CD- перейти)

4.2. Войти в каталог первого уровня.

4.3. Вывести на экран содержимое каталога первого уровня.

4.4. Очистить экран.

4.5. Создать, а затем перейти в каталог второго уровня.

4.6. Создать в текущем каталоге два дополнительных подкаталога.

4.7. Вывести на экран содержимое каталога второго уровня.

4.8. Перейти в корневой каталог.

4.9. Создать в каталоге первого уровня LEFO файл PR1.TXT

COPY CON PR1.TXT

Набрать Ваш текст…..

4.10 Вывести содержимое файла PR1.TXT на экран дисплея.

4.11. Вывести содержимое файла PR1.TXT на печать.

4.12. Скопировать PR1.TXT в LEFO\LEV.

LEFO>COPY PR1.TXT LEV

4.13. Переименовать файл PR1.TXT в файл PR1.DAT

LEFO>REN LEV\PR1.TXT PR1.DAT

4.14. Начертить дерево каталогов, полученное в результате выполнении команд.

4.15 Удалить все созданные Вами файлы и каталоги.

How to list files using dos commands?

I need to list the names of the files and store it in as text file!

What I did is, I used the following dos command

what this does is that, it stores the names of the files present in directory xyz as well as size, time and date of the files!

How to get only the names of files?

2 Answers 2

Try dir /b , for bare format.

dir /? will show you documentation of what you can do with the dir command. Here is the output from my Windows 7 machine:

If you just want to get the file names and not directory names then use :

Илон Маск рекомендует:  Что такое код onexit
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL