Skip to content

Commit

Permalink
Update blog permalink format, add redirects
Browse files Browse the repository at this point in the history
- adds the year/month/day/ to blog permalinks

- adds redirects for all posts to the new format

- updates the old redirects, so that it doesn’t redirect twice
  • Loading branch information
jessesquires committed Apr 12, 2020
1 parent d2eb345 commit 4493751
Show file tree
Hide file tree
Showing 2 changed files with 175 additions and 52 deletions.
225 changes: 174 additions & 51 deletions .htaccess
Original file line number Diff line number Diff line change
Expand Up @@ -16,55 +16,178 @@ Redirect 301 /work/ /linkedout/
Redirect 301 /opensource/ /projects/
Redirect 301 /archive/ /blog/

# redirects for old blog URLs from / to /blog/
# redirects for old blog URLs
# moved from /title to /blog/title
# updated again from /blog/title to /blog/year/month/day/title

Redirect 301 /built-with-open-source/ /blog/built-with-open-source/
Redirect 301 /apples-to-apples/ /blog/apples-to-apples/
Redirect 301 /status-bars-matter/ /blog/status-bars-matter/
Redirect 301 /apples-to-apples-part-two/ /blog/apples-to-apples-part-two/
Redirect 301 /on-the-value-of-benchmarks/ /blog/on-the-value-of-benchmarks/
Redirect 301 /apples-to-apples-part-three/ /blog/apples-to-apples-part-three/
Redirect 301 /adaptive-user-interfaces/ /blog/adaptive-user-interfaces/
Redirect 301 /swift-failable-initializers/ /blog/swift-failable-initializers/
Redirect 301 /rosetta-stone-contributes/ /blog/rosetta-stone-contributes/
Redirect 301 /introducing-jsqmessagesvc-6-0/ /blog/introducing-jsqmessagesvc-6-0/
Redirect 301 /swift-coredata-and-testing/ /blog/swift-coredata-and-testing/
Redirect 301 /better-coredata-models-in-swift/ /blog/better-coredata-models-in-swift/
Redirect 301 /functional-notifications/ /blog/functional-notifications/
Redirect 301 /swift-failable-initializers-revisited/ /blog/swift-failable-initializers-revisited/
Redirect 301 /using-core-data-in-swift/ /blog/using-core-data-in-swift/
Redirect 301 /swift-namespaced-constants/ /blog/swift-namespaced-constants/
Redirect 301 /swift-enumerations-and-equatable/ /blog/swift-enumerations-and-equatable/
Redirect 301 /UIKit-changes-in-iOS-9/ /blog/UIKit-changes-in-iOS-9/
Redirect 301 /building-data-sources-in-swift/ /blog/building-data-sources-in-swift/
Redirect 301 /swift-open-source/ /blog/swift-open-source/
Redirect 301 /open-source-swift-weekly-1/ /blog/open-source-swift-weekly-1/
Redirect 301 /open-source-swift-weekly-2/ /blog/open-source-swift-weekly-2/
Redirect 301 /open-source-swift-weekly-3/ /blog/open-source-swift-weekly-3/
Redirect 301 /open-source-swift-weekly-4/ /blog/open-source-swift-weekly-4/
Redirect 301 /new-weekly-brief/ /blog/new-weekly-brief/
Redirect 301 /jsqmessages-call-for-contributors/ /blog/jsqmessages-call-for-contributors/
Redirect 301 /swifty-presenters/ /blog/swifty-presenters/
Redirect 301 /contributing-to-swift/ /blog/contributing-to-swift/
Redirect 301 /swift-documentation/ /blog/swift-documentation/
Redirect 301 /open-source-everything/ /blog/open-source-everything/
Redirect 301 /avoiding-objc-in-swift/ /blog/avoiding-objc-in-swift/
Redirect 301 /the-a5-is-dead/ /blog/the-a5-is-dead/
Redirect 301 /swift-3-sherlocked-my-libraries/ /blog/swift-3-sherlocked-my-libraries/
Redirect 301 /migrating-to-swift-3/ /blog/migrating-to-swift-3/
Redirect 301 /enums-as-configs/ /blog/enums-as-configs/
Redirect 301 /speaking-at-frenchkit/ /blog/speaking-at-frenchkit/
Redirect 301 /shipping-swift-3/ /blog/shipping-swift-3/
Redirect 301 /understanding-swift-evolution/ /blog/understanding-swift-evolution/
Redirect 301 /contributing-to-swift-weekly/ /blog/contributing-to-swift-weekly/
Redirect 301 /140-proposals-frenchkit-video/ /blog/140-proposals-frenchkit-video/
Redirect 301 /swift-documentation-part-2/ /blog/swift-documentation-part-2/
Redirect 301 /testing-without-ocmock/ /blog/testing-without-ocmock/
Redirect 301 /pushing-limits-of-pop/ /blog/pushing-limits-of-pop/
Redirect 301 /prioritization/ /blog/prioritization/
Redirect 301 /sleazy-recruiting/ /blog/sleazy-recruiting/
Redirect 301 /refactoring-singletons-in-swift/ /blog/refactoring-singletons-in-swift/
Redirect 301 /adapting-to-change-and-cutting-corners/ /blog/adapting-to-change-and-cutting-corners/
Redirect 301 /swift-unwrapped/ /blog/swift-unwrapped/
Redirect 301 /thoughts-on-swift-access-control/ /blog/thoughts-on-swift-access-control/
Redirect 301 /a-fair-hotel/ /blog/a-fair-hotel/
Redirect 301 /built-with-open-source /blog/2014/06/09/built-with-open-source
Redirect 301 /apples-to-apples /blog/2014/06/25/apples-to-apples
Redirect 301 /status-bars-matter /blog/2014/08/03/status-bars-matter
Redirect 301 /apples-to-apples-part-two /blog/2014/08/06/apples-to-apples-part-two
Redirect 301 /on-the-value-of-benchmarks /blog/2014/08/19/on-the-value-of-benchmarks
Redirect 301 /apples-to-apples-part-three /blog/2014/08/21/apples-to-apples-part-three
Redirect 301 /adaptive-user-interfaces /blog/2014/10/01/adaptive-user-interfaces
Redirect 301 /swift-failable-initializers /blog/2014/10/22/swift-failable-initializers
Redirect 301 /rosetta-stone-contributes /blog/2014/12/05/rosetta-stone-contributes
Redirect 301 /introducing-jsqmessagesvc-6-0 /blog/2014/12/08/introducing-jsqmessagesvc-6-0
Redirect 301 /swift-coredata-and-testing /blog/2015/01/05/swift-coredata-and-testing
Redirect 301 /better-coredata-models-in-swift /blog/2015/02/17/better-coredata-models-in-swift
Redirect 301 /functional-notifications /blog/2015/03/31/functional-notifications
Redirect 301 /swift-failable-initializers-revisited /blog/2015/04/06/swift-failable-initializers-revisited
Redirect 301 /using-core-data-in-swift /blog/2015/05/25/using-core-data-in-swift
Redirect 301 /swift-namespaced-constants /blog/2015/07/19/swift-namespaced-constants
Redirect 301 /swift-enumerations-and-equatable /blog/2015/07/26/swift-enumerations-and-equatable
Redirect 301 /UIKit-changes-in-iOS-9 /blog/2015/10/14/UIKit-changes-in-iOS-9
Redirect 301 /building-data-sources-in-swift /blog/2015/10/25/building-data-sources-in-swift
Redirect 301 /swift-open-source /blog/2015/12/06/swift-open-source
Redirect 301 /open-source-swift-weekly-1 /blog/2015/12/10/open-source-swift-weekly-1
Redirect 301 /open-source-swift-weekly-2 /blog/2015/12/17/open-source-swift-weekly-2
Redirect 301 /open-source-swift-weekly-3 /blog/2015/12/24/open-source-swift-weekly-3
Redirect 301 /open-source-swift-weekly-4 /blog/2016/01/07/open-source-swift-weekly-4
Redirect 301 /new-weekly-brief /blog/2016/01/14/new-weekly-brief
Redirect 301 /jsqmessages-call-for-contributors /blog/2016/02/06/jsqmessages-call-for-contributors
Redirect 301 /swifty-presenters /blog/2016/02/19/swifty-presenters
Redirect 301 /contributing-to-swift /blog/2016/03/21/contributing-to-swift
Redirect 301 /swift-documentation /blog/2016/05/20/swift-documentation
Redirect 301 /open-source-everything /blog/2016/05/22/open-source-everything
Redirect 301 /avoiding-objc-in-swift /blog/2016/06/04/avoiding-objc-in-swift
Redirect 301 /the-a5-is-dead /blog/2016/06/14/the-a5-is-dead
Redirect 301 /swift-3-sherlocked-my-libraries /blog/2016/07/03/swift-3-sherlocked-my-libraries
Redirect 301 /migrating-to-swift-3 /blog/2016/07/25/migrating-to-swift-3
Redirect 301 /enums-as-configs /blog/2016/07/31/enums-as-configs
Redirect 301 /speaking-at-frenchkit /blog/2016/09/30/speaking-at-frenchkit
Redirect 301 /shipping-swift-3 /blog/2016/10/01/shipping-swift-3
Redirect 301 /understanding-swift-evolution /blog/2016/10/03/understanding-swift-evolution
Redirect 301 /contributing-to-swift-weekly /blog/2016/10/06/contributing-to-swift-weekly
Redirect 301 /140-proposals-frenchkit-video /blog/2016/11/05/140-proposals-frenchkit-video
Redirect 301 /swift-documentation-part-2 /blog/2017/01/08/swift-documentation-part-2
Redirect 301 /testing-without-ocmock /blog/2017/01/16/testing-without-ocmock
Redirect 301 /pushing-limits-of-pop /blog/2017/01/23/pushing-limits-of-pop
Redirect 301 /prioritization /blog/2017/02/08/prioritization
Redirect 301 /sleazy-recruiting /blog/2017/02/09/sleazy-recruiting
Redirect 301 /refactoring-singletons-in-swift /blog/2017/02/10/refactoring-singletons-in-swift
Redirect 301 /adapting-to-change-and-cutting-corners /blog/2017/02/15/adapting-to-change-and-cutting-corners
Redirect 301 /swift-unwrapped /blog/2017/03/07/swift-unwrapped
Redirect 301 /thoughts-on-swift-access-control /blog/2017/04/05/thoughts-on-swift-access-control
Redirect 301 /a-fair-hotel /blog/2017/05/28/a-fair-hotel

# redirects for previous blog URLs
# moved from /blog/title to /blog/year/month/day/title

Redirect 301 /blog/built-with-open-source /blog/2014/06/09/built-with-open-source
Redirect 301 /blog/apples-to-apples /blog/2014/06/25/apples-to-apples
Redirect 301 /blog/status-bars-matter /blog/2014/08/03/status-bars-matter
Redirect 301 /blog/apples-to-apples-part-two /blog/2014/08/06/apples-to-apples-part-two
Redirect 301 /blog/on-the-value-of-benchmarks /blog/2014/08/19/on-the-value-of-benchmarks
Redirect 301 /blog/apples-to-apples-part-three /blog/2014/08/21/apples-to-apples-part-three
Redirect 301 /blog/adaptive-user-interfaces /blog/2014/10/01/adaptive-user-interfaces
Redirect 301 /blog/swift-failable-initializers /blog/2014/10/22/swift-failable-initializers
Redirect 301 /blog/rosetta-stone-contributes /blog/2014/12/05/rosetta-stone-contributes
Redirect 301 /blog/introducing-jsqmessagesvc-6-0 /blog/2014/12/08/introducing-jsqmessagesvc-6-0
Redirect 301 /blog/swift-coredata-and-testing /blog/2015/01/05/swift-coredata-and-testing
Redirect 301 /blog/better-coredata-models-in-swift /blog/2015/02/17/better-coredata-models-in-swift
Redirect 301 /blog/functional-notifications /blog/2015/03/31/functional-notifications
Redirect 301 /blog/swift-failable-initializers-revisited /blog/2015/04/06/swift-failable-initializers-revisited
Redirect 301 /blog/using-core-data-in-swift /blog/2015/05/25/using-core-data-in-swift
Redirect 301 /blog/swift-namespaced-constants /blog/2015/07/19/swift-namespaced-constants
Redirect 301 /blog/swift-enumerations-and-equatable /blog/2015/07/26/swift-enumerations-and-equatable
Redirect 301 /blog/UIKit-changes-in-iOS-9 /blog/2015/10/14/UIKit-changes-in-iOS-9
Redirect 301 /blog/building-data-sources-in-swift /blog/2015/10/25/building-data-sources-in-swift
Redirect 301 /blog/swift-open-source /blog/2015/12/06/swift-open-source
Redirect 301 /blog/open-source-swift-weekly-1 /blog/2015/12/10/open-source-swift-weekly-1
Redirect 301 /blog/open-source-swift-weekly-2 /blog/2015/12/17/open-source-swift-weekly-2
Redirect 301 /blog/open-source-swift-weekly-3 /blog/2015/12/24/open-source-swift-weekly-3
Redirect 301 /blog/open-source-swift-weekly-4 /blog/2016/01/07/open-source-swift-weekly-4
Redirect 301 /blog/new-weekly-brief /blog/2016/01/14/new-weekly-brief
Redirect 301 /blog/jsqmessages-call-for-contributors /blog/2016/02/06/jsqmessages-call-for-contributors
Redirect 301 /blog/swifty-presenters /blog/2016/02/19/swifty-presenters
Redirect 301 /blog/contributing-to-swift /blog/2016/03/21/contributing-to-swift
Redirect 301 /blog/swift-documentation /blog/2016/05/20/swift-documentation
Redirect 301 /blog/open-source-everything /blog/2016/05/22/open-source-everything
Redirect 301 /blog/avoiding-objc-in-swift /blog/2016/06/04/avoiding-objc-in-swift
Redirect 301 /blog/the-a5-is-dead /blog/2016/06/14/the-a5-is-dead
Redirect 301 /blog/swift-3-sherlocked-my-libraries /blog/2016/07/03/swift-3-sherlocked-my-libraries
Redirect 301 /blog/migrating-to-swift-3 /blog/2016/07/25/migrating-to-swift-3
Redirect 301 /blog/enums-as-configs /blog/2016/07/31/enums-as-configs
Redirect 301 /blog/speaking-at-frenchkit /blog/2016/09/30/speaking-at-frenchkit
Redirect 301 /blog/shipping-swift-3 /blog/2016/10/01/shipping-swift-3
Redirect 301 /blog/understanding-swift-evolution /blog/2016/10/03/understanding-swift-evolution
Redirect 301 /blog/contributing-to-swift-weekly /blog/2016/10/06/contributing-to-swift-weekly
Redirect 301 /blog/140-proposals-frenchkit-video /blog/2016/11/05/140-proposals-frenchkit-video
Redirect 301 /blog/swift-documentation-part-2 /blog/2017/01/08/swift-documentation-part-2
Redirect 301 /blog/testing-without-ocmock /blog/2017/01/16/testing-without-ocmock
Redirect 301 /blog/pushing-limits-of-pop /blog/2017/01/23/pushing-limits-of-pop
Redirect 301 /blog/prioritization /blog/2017/02/08/prioritization
Redirect 301 /blog/sleazy-recruiting /blog/2017/02/09/sleazy-recruiting
Redirect 301 /blog/refactoring-singletons-in-swift /blog/2017/02/10/refactoring-singletons-in-swift
Redirect 301 /blog/adapting-to-change-and-cutting-corners /blog/2017/02/15/adapting-to-change-and-cutting-corners
Redirect 301 /blog/swift-unwrapped /blog/2017/03/07/swift-unwrapped
Redirect 301 /blog/thoughts-on-swift-access-control /blog/2017/04/05/thoughts-on-swift-access-control
Redirect 301 /blog/a-fair-hotel /blog/2017/05/28/a-fair-hotel
Redirect 301 /blog/writing-better-singletons-in-swift /blog/2017/06/04/writing-better-singletons-in-swift
Redirect 301 /blog/protocol-composition-in-swift-and-objc /blog/2017/06/05/protocol-composition-in-swift-and-objc
Redirect 301 /blog/officially-deprecating-jsqmessagesviewcontroller /blog/2017/07/16/officially-deprecating-jsqmessagesviewcontroller
Redirect 301 /blog/a-story-about-swift-source-compat /blog/2017/07/17/a-story-about-swift-source-compat
Redirect 301 /blog/customizing-git-log /blog/2017/08/08/customizing-git-log
Redirect 301 /blog/data-society-media-manipulation /blog/2017/08/13/data-society-media-manipulation
Redirect 301 /blog/supporting-json-feed /blog/2017/09/03/supporting-json-feed
Redirect 301 /blog/building-a-site-with-jekyll-on-nfsn /blog/2017/09/10/building-a-site-with-jekyll-on-nfsn
Redirect 301 /blog/measuring-compile-times-xcode9 /blog/2017/09/18/measuring-compile-times-xcode9
Redirect 301 /blog/when-your-app-is-used-in-unexpected-ways /blog/2017/09/24/when-your-app-is-used-in-unexpected-ways
Redirect 301 /blog/floating-point-swift-ulp-and-epsilon /blog/2017/10/01/floating-point-swift-ulp-and-epsilon
Redirect 301 /blog/swift-weekly-brief-hiatus /blog/2017/12/28/swift-weekly-brief-hiatus
Redirect 301 /blog/how-to-sysdiagnose-ios /blog/2018/02/08/how-to-sysdiagnose-ios
Redirect 301 /blog/replacing-google-with-duckduckgo /blog/2018/02/25/replacing-google-with-duckduckgo
Redirect 301 /blog/upgrading-to-bootstrap-4 /blog/2018/04/16/upgrading-to-bootstrap-4
Redirect 301 /blog/removing-google-analytics-too /blog/2018/04/22/removing-google-analytics-too
Redirect 301 /blog/why-optional-swift-closures-are-escaping /blog/2018/06/10/why-optional-swift-closures-are-escaping
Redirect 301 /blog/thoughts-on-wwdc-2018 /blog/2018/06/11/thoughts-on-wwdc-2018
Redirect 301 /blog/xcode-tip-improving-assistant-editor /blog/2018/06/12/xcode-tip-improving-assistant-editor
Redirect 301 /blog/swift-unwrapped-at-wwdc-2018 /blog/2018/06/13/swift-unwrapped-at-wwdc-2018
Redirect 301 /blog/reading-adichie-dear-ijeawele /blog/2018/06/16/reading-adichie-dear-ijeawele
Redirect 301 /blog/choosing-a-vpn-service /blog/2018/06/24/choosing-a-vpn-service
Redirect 301 /blog/til-tor-browser /blog/2018/06/27/til-tor-browser
Redirect 301 /blog/xcode-tip-debugging-behavior-new-tab /blog/2018/07/01/xcode-tip-debugging-behavior-new-tab
Redirect 301 /blog/swifts-new-calling-convention /blog/2018/07/05/swifts-new-calling-convention
Redirect 301 /blog/blaming-homelessness-on-the-homeless-sf /blog/2018/07/19/blaming-homelessness-on-the-homeless-sf
Redirect 301 /blog/swift-tip-building-arrays-with-compactmap /blog/2018/07/29/swift-tip-building-arrays-with-compactmap
Redirect 301 /blog/the-four-agreements /blog/2018/07/30/the-four-agreements
Redirect 301 /blog/15-years-later /blog/2018/09/26/15-years-later
Redirect 301 /blog/lars-and-the-basket-of-apples /blog/2018/10/08/lars-and-the-basket-of-apples
Redirect 301 /blog/debugging-subtle-swift-bug-facepalm /blog/2018/11/07/debugging-subtle-swift-bug-facepalm
Redirect 301 /blog/executing-applescript-in-mac-app-on-macos-mojave /blog/2018/11/17/executing-applescript-in-mac-app-on-macos-mojave
Redirect 301 /blog/reading-list-2018 /blog/2019/01/05/reading-list-2018
Redirect 301 /blog/how-to-estimate-engineering-project-timelines /blog/2019/02/25/how-to-estimate-engineering-project-timelines
Redirect 301 /blog/reading-notes-1 /blog/2019/03/22/reading-notes-1
Redirect 301 /blog/introducing-lucifer /blog/2019/03/26/introducing-lucifer
Redirect 301 /blog/reading-notes-2 /blog/2019/08/07/reading-notes-2
Redirect 301 /blog/linked-out /blog/2019/08/13/linked-out
Redirect 301 /blog/implementing-right-click-for-nsbutton /blog/2019/08/15/implementing-right-click-for-nsbutton
Redirect 301 /blog/update-to-lucifer /blog/2019/08/16/update-to-lucifer
Redirect 301 /blog/workaround-highlight-bug-nsstatusitem /blog/2019/08/16/workaround-highlight-bug-nsstatusitem
Redirect 301 /blog/my-dad-ate-an-impossible-whopper /blog/2019/08/19/my-dad-ate-an-impossible-whopper
Redirect 301 /blog/introducing-red-eye /blog/2019/09/03/introducing-red-eye
Redirect 301 /blog/announcing-plurals-and-noun /blog/2019/09/13/announcing-plurals-and-noun
Redirect 301 /blog/swift-unwrapped-5-1-doug-gregor /blog/2019/09/16/swift-unwrapped-5-1-doug-gregor
Redirect 301 /blog/the-aca-and-your-credit-report /blog/2019/09/19/the-aca-and-your-credit-report
Redirect 301 /blog/overriding-status-bar-settings-ios-simulator /blog/2019/09/26/overriding-status-bar-settings-ios-simulator
Redirect 301 /blog/icloud-backup-using-rsync /blog/2019/09/27/icloud-backup-using-rsync
Redirect 301 /blog/reading-notes-3 /blog/2019/09/29/reading-notes-3
Redirect 301 /blog/reading-notes-4 /blog/2019/09/29/reading-notes-4
Redirect 301 /blog/automating-simctl-status-bar /blog/2019/09/30/automating-simctl-status-bar
Redirect 301 /blog/reading-list-2019 /blog/2020/01/04/reading-list-2019
Redirect 301 /blog/selecting-an-xcode-version-on-github-ci /blog/2020/01/06/selecting-an-xcode-version-on-github-ci
Redirect 301 /blog/observing-appearance-changes-on-ios-and-macos /blog/2020/01/08/observing-appearance-changes-on-ios-and-macos
Redirect 301 /blog/time-machine-failing-on-macos-catalina /blog/2020/01/10/time-machine-failing-on-macos-catalina
Redirect 301 /blog/apple-script-to-export-open-safari-tabs-to-omnifocus /blog/2020/01/14/apple-script-to-export-open-safari-tabs-to-omnifocus
Redirect 301 /blog/xcode-tip-breakpoints-as-bookmarks /blog/2020/01/21/xcode-tip-breakpoints-as-bookmarks
Redirect 301 /blog/github-default-community-health-files /blog/2020/01/24/github-default-community-health-files
Redirect 301 /blog/mac-app-tests-fail-with-hardened-runtime /blog/2020/02/23/mac-app-tests-fail-with-hardened-runtime
Redirect 301 /blog/replacing-cocoapods-with-swiftpm /blog/2020/02/24/replacing-cocoapods-with-swiftpm
Redirect 301 /blog/jetbrains-mono-and-disabling-font-ligatures /blog/2020/02/25/jetbrains-mono-and-disabling-font-ligatures
Redirect 301 /blog/another-issue-with-swiftpm-xcode-integration /blog/2020/03/04/another-issue-with-swiftpm-xcode-integration
Redirect 301 /blog/implementing-dark-mode-with-cgcolor /blog/2020/03/23/implementing-dark-mode-with-cgcolor
Redirect 301 /blog/libraries-for-building-menu-bar-mac-apps /blog/2020/04/07/libraries-for-building-menu-bar-mac-apps
Redirect 301 /blog/running-danger-on-github-actions /blog/2020/04/10/running-danger-on-github-actions
Redirect 301 /blog/bay-area-mutual-aid-covid-19 /blog/2020/04/11/bay-area-mutual-aid-covid-19
Redirect 301 /blog/previously-previously-previously-relocated-items-in-macos-catalina /blog/2020/04/11/previously-previously-previously-relocated-items-in-macos-catalina
2 changes: 1 addition & 1 deletion _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ keep_files:
- .well-known

# Site
permalink: /blog/:title/
permalink: /blog/:year/:month/:day/:title/
img_url: /img
excerpt_separator: <!--excerpt-->
sass:
Expand Down

0 comments on commit 4493751

Please sign in to comment.