Резюме существующих ответов плюс мои собственные два цента:
Вы можете использовать функцию header()
для отправки нового HTTP-заголовка, но это должно быть отправлено в браузер перед любым HTML или текстом (например, до объявления , например).
header('Location: '.$newURL);
die () или exit ()
header("Location: http://example.com/myOtherPage.php");
die();
Почему вы должны использовать die()
или exit()
: The Daily WTF
Абсолютный или относительный URL
С июня 2014 года могут использоваться как абсолютные, так и относительные URL-адреса. См. RFC 7231 , который заменил старый RFC 2616 , где разрешены только абсолютные URL.
Коды статуса
PHP " Местоположение «-header по-прежнему использует HTTP 302 -предельный код, но это не тот, который вы должны использовать. Вы должны рассмотреть либо 301 (постоянная переадресация), либо 303 (другое).
Примечание: W3C упоминает , что 303 -header несовместим со многими пользовательскими агентами pre-HTTP / 1.1. В настоящее время используемыми браузерами являются все пользовательские агенты HTTP / 1.1. Это неверно для многих других пользовательских агентов, таких как пауки и роботы.
Заголовки HTTP и функция header()
в PHP
Вы можете использовать альтернативу метод http_redirect($url);
, для которого необходимо установить пакет PECL pecl .
Эта функция не включает код состояния 303 :
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('http://example.com/', false);
Это более гибко:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
Как уже упоминалось, header()
перенаправляет работу только до того, как что-либо выписано. Они обычно терпят неудачу, если вызывается inmidst HTML . Затем вы может использовать метод обхода HTML-заголовка (не очень профессиональный!), например:
Или перенаправление JavaScript даже.
window.location.replace("http://example.com/");
Я использую .cs файл на уровне решения, который связан всеми проектами в решении, которое содержит следующие строки:
using System.Reflection;
[assembly : AssemblyVersion("1.2.3.*")]
И убеждаться удалить эти AssemblyFileVersion
атрибут из файла AssemblyInfo в Вашем проекте.
Поместите файл в решение, назовите этот "SolutionInfo.cs" (я принимаю C#, также работал бы в VB). В этом поместил все свойства, которые Вы имеете общего. Запустите с AssemblyVersionAttribute
.
Тогда в каждой ссылке проекта к этому выбором добавляют существующий объект к каждому проекту, а скорее, чем нажатие добавляет, используйте выпадающее для добавления как ссылка.
Можно записать пользовательскую задачу MSBuild сделать это. Взгляните на этот подход
У нас есть единственный файл AssemblyInfoGlobal.cs на уровне решения, как другие ответы. Тогда мы имеем как часть нашего сценария сборки немного приложения, которое берет CCNetLabel, который CruiseControl.net определяет (и использование defaultLabeller, чтобы генерировать маркировки) и контроль глобальный файл, изменить номер версии и затем перепроверить глобальный файл в.
Некоторые наши проекты имеют несколько решений, таким образом, глобальный файл находится выше уровня решения в структуре каталогов, достаточно высоко так, чтобы все, чему нужен он, было ниже его.
Мы также тогда обновляем номера версий проектов развертывания - число для них найдено в файле VDProj, но я не уверен, что Вы найдете их в специальных версиях - я думаю, что это - полный Профессионал вверх функция. И некоторые проекты имеют дюжину проектов развертывания, но никакой простой способ воплотить версию numberf из самого файла VDPROJ. (или есть ли?)
Тогда сборка происходит, что означает, что все выводы от сборки имеют точно тот же номер версии, в любое время мы можем получить версию от MSI или блока, и мы знаем точно, какой источник использовался для создания того вывода.
Можно использовать звездочки в AssemblyInfo.cs:
// Version information
[assembly: AssemblyVersion( "1.0.*" )]
Это увеличит Ваш versionnumbers автоматически. Для совместного использования одного числа между всеми блоками... Я не уверен, но возможно Вы используете упомянутый атрибут в совместно используемом файле.
Я использовал задачи сообщества svnversion MSBuild , чтобы сделать что-то вроде этого, я следовал инструкциям здесь , Хотя способ, которым я делаю это, не охватывает несколько блоков.