Jake Rankin
Jake Rankin

Reputation: 744

How to limit catch all urls in django

I have a django project with specific urls, setup by a 'catchall' URL.

This is so I can go to mysite/living, and have it pass living as a parameter and pull up the appropriate details from my db.

My urls.py:

url(r'^$', views.index, name='index'),
url('about/', views.about_view, name='about_view'),
url('contact/', views.contact_view, name='contact_view'),
url('(?P<colcat>[\w\-]+)/collection/(?P<name>[\w\-]+)$', views.collection_detail, name='collection_detail'),
url('(?P<colcat>[\w\-]+)/$', views.collection_view, name='collection_view'),

I am running into the problem where, anything can be passed as a parameter. This is particularly notable with search engines, where mysite/index.html/index.html returns a valid page.

Is there a way to limit the urls that are 'allowed' to be matched?

Upvotes: 1

Views: 198

Answers (1)

Sreekanth Reddy Balne
Sreekanth Reddy Balne

Reputation: 3424

It is very unlikely for a user to enter/modify URLs manually while browsing. Everyone just googles and clicks whatever link is shown by the search engine. So, You just need to restrict what the search engine indexes.

This can be done by adding a sitemap.xml file to the root of your website.

sitemap.xml specifies all the urls of your website along with some additional information inorder to make it easier for search engines to crawl. If you don't add a sitemap.xml, search engines try to crawl through every possible url. If added they wont.

There is already a sitemap generating framework provided by django: https://docs.djangoproject.com/en/2.1/ref/contrib/sitemaps/

Upvotes: 1

Related Questions