Я не рекомендую использовать отсутствующий обработчик файла (или CF onMissingTemplate
). В противном случае IIS вернет код состояния 404, и ваша страница не будет проиндексирована поисковыми системами.
Что вам нужно сделать, это определить уникальный шаблон префикса, который вы хотите использовать, и создать правило перезаписи web.config
. Пример. Я иногда использую «/ detail _» + id для страниц с подробными сведениями о продукте.
Если вы не хотите, вам не нужно сохранять подкаталог «/ blog». Добавьте следующее правило перезаписи в файл web.config в корневом каталоге веб-сайта, чтобы принять что-либо после /blog/
в URL-адресе и интерпретировать его как /?blogtitle=[everythingAfterBlog]
. (Я добавил дополнительное предложение в случае, если вы хотите продолжать поддерживать ссылки /blog/article.cfm
.)
<rules>
<rule name="Blog" patternSyntax="ECMAScript" stopProcessing="true">
<match url="blog/(.*)$" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{SCRIPT_FILENAME}" matchType="IsFile" negate="true" />
<add input="{PATH_INFO}" pattern="^.*(blog/article.cfm).*$" negate="true" />
</conditions>
<action type="Rewrite" url="/?blogtitle={R:1}" appendQueryString="true" />
</rule>
</rules>
Я рекомендую использовать «301 Redirect» для нового URL-адреса, ориентированного на SEO. Я также советую использовать дефис (-) между фрагментами слов и гарантировать, что случай символа согласован (т. Е. В нижнем регистре), или вы можете получить наказание за «дублированный контент».
Поскольку вы используете слабый делегат, это никоим образом не приведет к сохранению цикла.
Я думаю, что ваш viewController не освобождается, потому что ваш viewController все еще находится в стеке вашей навигации.
Попробуйте удалить все viewControllers из стека навигации, и тогда ваш блок освобождения будет работать как обычно.
Попробуйте следующий код в зависимости от ваших требований (присутствует / нажмите), когда вы возвращаетесь к своему homeViewController:
self.navigationController?.popToRootViewController(animated: true)
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
Редактировать:
Убедитесь, что ваш протокол относится к типу классов, тогда будет работать только слабая ссылка.
protocol LoadImagePickerManager: class {
}
В вашем PickerManager попытайтесь отклонить, используя следующий код, он перенаправит вас на контроллер rootview, но вы можете снова нажать или представить требуемый контроллер представления:
self.view.window?.rootViewController?.dismiss(animated: false, completion: nil)