mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 23:07:28 +08:00
FIX: permalinks should work for Discourse categories
This commit is contained in:
@ -228,11 +228,11 @@ class ListController < ApplicationController
|
|||||||
parent_category_id = nil
|
parent_category_id = nil
|
||||||
if parent_slug_or_id.present?
|
if parent_slug_or_id.present?
|
||||||
parent_category_id = Category.query_parent_category(parent_slug_or_id)
|
parent_category_id = Category.query_parent_category(parent_slug_or_id)
|
||||||
raise Discourse::NotFound if parent_category_id.blank?
|
redirect_or_not_found and return if parent_category_id.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
@category = Category.query_category(slug_or_id, parent_category_id)
|
@category = Category.query_category(slug_or_id, parent_category_id)
|
||||||
raise Discourse::NotFound if !@category
|
redirect_or_not_found and return if !@category
|
||||||
|
|
||||||
@description_meta = @category.description_text
|
@description_meta = @category.description_text
|
||||||
guardian.ensure_can_see!(@category)
|
guardian.ensure_can_see!(@category)
|
||||||
@ -308,4 +308,23 @@ class ListController < ApplicationController
|
|||||||
periods
|
periods
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def redirect_or_not_found
|
||||||
|
url = request.fullpath
|
||||||
|
permalink = Permalink.find_by_url(url)
|
||||||
|
|
||||||
|
if permalink.present?
|
||||||
|
# permalink present, redirect to that URL
|
||||||
|
if permalink.external_url
|
||||||
|
redirect_to permalink.external_url, status: :moved_permanently
|
||||||
|
elsif permalink.target_url
|
||||||
|
redirect_to "#{Discourse::base_uri}#{permalink.target_url}", status: :moved_permanently
|
||||||
|
else
|
||||||
|
raise Discourse::NotFound
|
||||||
|
end
|
||||||
|
else
|
||||||
|
# redirect to 404
|
||||||
|
raise Discourse::NotFound
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user