# Since when are URLs case sensitive?

**URL:** <https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689>\
**Category:** Factual Questions\
**Created:** [January 12, 2010, 6:37pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689 "2010-01-12T18:37:08Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![mswas](https://avatars.discourse-cdn.com/v4/letter/m/e99b99/32.png) [@mswas](https://boards.straightdope.com/u/mswas)\
**Post date:** [January 12, 2010, 6:37pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/1 "2010-01-12T18:37:08Z")

</div>

So I have [emailMyName- Low-cost email address - 1GB email storage - Block spam - Web & POP3 email access - Get your name as your email address](http://mysite.net/Joomla/) for my Joomla directory, but going to [emailMyName- Low-cost email address - 1GB email storage - Block spam - Web & POP3 email access - Get your name as your email address](http://mysite.net/joomla/) won’t take me there.

What gives?

---

<div class="post-metadata">

**Author:** ![TWDuke](https://avatars.discourse-cdn.com/v4/letter/t/e495f1/32.png) [@TWDuke](https://boards.straightdope.com/u/TWDuke)\
**Post date:** [January 12, 2010, 6:40pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/2 "2010-01-12T18:40:26Z")

</div>

The part _after_ the single slash has _always_ been case sensitive. (“Always” in this case being at least since I started using the Web, which was 1993-ish.) Note that [emailMyName- Low-cost email address - 1GB email storage - Block spam - Web & POP3 email access - Get your name as your email address](http://MYSITE.NET/joomla) should work just fine.

This doesn’t really answer the “since when” question, but it contains the official lowdown on URLs: [HTML and URLs](http://www.w3.org/TR/WD-html40-970708/htmlweb.html)

---

<div class="post-metadata">

**Author:** ![ZipperJJ](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/zipperjj/32/211_2.png) [@ZipperJJ](https://boards.straightdope.com/u/ZipperJJ)\
**Post date:** [January 12, 2010, 6:48pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/3 "2010-01-12T18:48:07Z")

</div>

Windows web servers don’t require it. I’m not sure if there’s a setting to allow any case in Apache (Linux web servers) or not.

---

<div class="post-metadata">

**Author:** ![HorseloverFat](https://avatars.discourse-cdn.com/v4/letter/h/8e8cbc/32.png) [@HorseloverFat](https://boards.straightdope.com/u/HorseloverFat)\
**Post date:** [January 12, 2010, 7:20pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/4 "2010-01-12T19:20:02Z")

</div>

If its unix/linux its probably case sensitive. Windows generally is not. I believe this is all configurable per application or virtual directory or at least manageable via mod\_rewrite in Apache. If youre making a site its important to keep the case the same.

---

<div class="post-metadata">

**Author:** ![engineer\_comp\_geek](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/engineer_comp_geek/32/504_2.png) [@engineer\_comp\_geek](https://boards.straightdope.com/u/engineer_comp_geek)\
**Post date:** [January 12, 2010, 7:38pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/5 "2010-01-12T19:38:29Z")

</div>

The answer to the “when” part of this is that it has always been this way for as long as the http protocol has been around. The part that specifies the machine (the [mysite.net](http://mysite.net) part) has never been case sensitive. The part that specifies the directory and file (the /Joomla) has always been machine dependent. Since most early internet machines were unix based, that part has usually been case sensitive. VMS machines weren’t case sensitive, and Windows machines aren’t case sensitive.

---

<div class="post-metadata">

**Author:** ![Rhythmdvl](https://avatars.discourse-cdn.com/v4/letter/r/85f322/32.png) [@Rhythmdvl](https://boards.straightdope.com/u/Rhythmdvl)\
**Post date:** [January 12, 2010, 7:43pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/6 "2010-01-12T19:43:32Z")

</div>

How I understand it (which may be wrong):

The first bit, [noparse][www.yoursite.com](http://www.yoursite.com)[/noparse] is resolved (translated to a numeric IP address) by the DNS (domain name server) computer. They run on an OS that doesn’t care about capitals in that field, and they don’t care what comes after the main suffix (what’s that called?).

When your browser’s call makes it to the hosting company’s computers, they look at everything _after_ the slash (and before, I think). Their OS may or may not be case sensitive.

If I wasn’t helpful, would someone fight my ignorance?

---

<div class="post-metadata">

**Author:** ![CaveMike](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/cavemike/32/16379_2.png) [@CaveMike](https://boards.straightdope.com/u/CaveMike)\
**Post date:** [January 12, 2010, 8:11pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/7 "2010-01-12T20:11:29Z")

</div>

> [@Rhythmdvl](#):
>
> The first bit, [noparse][www.yoursite.com](http://www.yoursite.com)[/noparse] is resolved (translated to a numeric IP address) by the DNS (domain name server) computer. They run on an OS that doesn’t care about capitals in that field…

Just a clarification, the DNS protocol defines these names to be case-insensitive. The underlying implementation’s OS doesn’t matter here. Whatever OS is used to implement a DNS resolver must comply with the protocol.

> [@Rhythmdvl](#):
>
> …and they don’t care what comes after the main suffix (what’s that called?).

It’s called the path. I thought the URI spec defined the path as case-sensitive, but I cannot find a reference. The most I found is [this](http://www.w3.org/TR/html4/types.html#h-6.4) which isn’t good enough for a GQ.

However, as others have said regardless of the protocol, some web-servers will treat the path as case-insensitive.

---

<div class="post-metadata">

**Author:** ![CookingWithGas](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/cookingwithgas/32/485_2.png) [@CookingWithGas](https://boards.straightdope.com/u/CookingWithGas)\
**Post date:** [January 12, 2010, 8:13pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/8 "2010-01-12T20:13:15Z")

</div>

> [@Rhythmdvl](#):
>
> The first bit, [noparse][www.yoursite.com](http://www.yoursite.com)[/noparse] is resolved (translated to a numeric IP address) by the DNS (domain name server) computer. They run on an OS that doesn’t care about capitals in that field, and they don’t care what comes after the main suffix (what’s that called?).

The “com” part is the top-level domain, or TLD. Is that what you mean by “main suffix”?

The part immediately to the left, “yoursite” in your example, is the second-level domain name (SLD).

---

<div class="post-metadata">

**Author:** ![HorseloverFat](https://avatars.discourse-cdn.com/v4/letter/h/8e8cbc/32.png) [@HorseloverFat](https://boards.straightdope.com/u/HorseloverFat)\
**Post date:** [January 12, 2010, 8:25pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/9 "2010-01-12T20:25:20Z")

</div>

[RFC3986](http://labs.apache.org/webarch/uri/rfc/rfc3986.html)

> [@](#):
>
> 6.2.2.1. Case Normalization
> 
> For all URIs, the hexadecimal digits within a percent-encoding triplet (e.g., “%3a” versus “%3A”) are case-insensitive and therefore should be normalized to use uppercase letters for the digits A-F.
> 
> When a URI uses components of the generic syntax, the component syntax equivalence rules always apply; namely, that the scheme and host are case-insensitive and therefore should be normalized to lowercase. For example, the URI \<[HTTP://www.EXAMPLE.com/&gt](HTTP://www.EXAMPLE.com/&gt); is equivalent to \<[http://www.example.com/&gt;](http://www.example.com/&gt;). The other generic syntax components are assumed to be case-sensitive unless specifically defined otherwise by the scheme (see Section 6.2.3).

So the domain case doesnt matter (this is true of all DNS) but everything after it does.

6.2.3’s part about case here:

> [@](#):
>
> Some schemes define additional subcomponents that consist of case-insensitive data, giving an implicit license to normalizers to convert this data to a common case (e.g., all lowercase). For example, URI schemes that define a subcomponent of path to contain an Internet hostname, such as the “mailto” URI scheme, cause that subcomponent to be case-insensitive and thus subject to case normalization (e.g., “[mailto:Joe@Example.COM](mailto:Joe@Example.COM)” is equivalent to “[mailto:Joe@example.com](mailto:Joe@example.com)”, even though the generic syntax considers the path component to be case-sensitive).

So URI’s with dns names should be normalized.

---

<div class="post-metadata">

**Author:** ![Rhythmdvl](https://avatars.discourse-cdn.com/v4/letter/r/85f322/32.png) [@Rhythmdvl](https://boards.straightdope.com/u/Rhythmdvl)\
**Post date:** [January 12, 2010, 8:56pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/10 "2010-01-12T20:56:16Z")

</div>

Ignorance begone!  
Thanks

---

<div class="post-metadata">

**Author:** ![Pleonast](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/pleonast/32/1183_2.png) [@Pleonast](https://boards.straightdope.com/u/Pleonast)\
**Post date:** [January 12, 2010, 9:12pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/11 "2010-01-12T21:12:28Z")

</div>

How does case sensitivity work for the new non-Latin-alphabet domain names?

---

<div class="post-metadata">

**Author:** ![MeanOldLady](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/meanoldlady/32/10737_2.png) [@MeanOldLady](https://boards.straightdope.com/u/MeanOldLady)\
**Post date:** [January 12, 2010, 9:23pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/12 "2010-01-12T21:23:49Z")

</div>

> [@Rhythmdvl](#):
>
> Ignorance begone!  
> Thanks

Indeed! As a little experiment, I typed [boards.straightdope.com/Sdmb](http://boards.straightdope.com/Sdmb) into my browser, and guess what happened.

It didn’t work.

---

<div class="post-metadata">

**Author:** ![friedo](https://avatars.discourse-cdn.com/v4/letter/f/8edcca/32.png) [@friedo](https://boards.straightdope.com/u/friedo)\
**Post date:** [January 12, 2010, 9:25pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/13 "2010-01-12T21:25:32Z")

</div>

> [@Pleonast](#):
>
> How does case sensitivity work for the new non-Latin-alphabet domain names?

Domain names are not case-sensitive, so the issue doesn’t apply. The rules for case-normalization of Unicode strings are a tad hairy, but domain names in any script should normalize to lower-case, if there is such a thing, for the script in question.

---

<div class="post-metadata">

**Author:** ![CookingWithGas](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/cookingwithgas/32/485_2.png) [@CookingWithGas](https://boards.straightdope.com/u/CookingWithGas)\
**Post date:** [January 12, 2010, 9:27pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/14 "2010-01-12T21:27:41Z")

</div>

> [@Pleonast](#):
>
> How does case sensitivity work for the new non-Latin-alphabet domain names?

I believe these are not official schemes sanctioned by ICANN (unless I am hopelessly behind the times) but rather clever mapping schemes that require browser plug-ins or something to work. They use Unicode characters and then map that using an algorithm that ends up mapping to a case-insensitive latin alphabet. So the source domain name _can be_ case-sensitive as provided by Unicode, though I can’t tell you in practice what standard they might use.

---

<div class="post-metadata">

**Author:** ![friedo](https://avatars.discourse-cdn.com/v4/letter/f/8edcca/32.png) [@friedo](https://boards.straightdope.com/u/friedo)\
**Post date:** [January 12, 2010, 10:42pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/15 "2010-01-12T22:42:52Z")

</div>

All current browsers support Unicode domain names, so no plugins are needed. You are right that they are implemented as a hack on top of DNS, which is not actually restricted to the ASCII character set, but several application-level protocols like SMTP _do_ restrict the valid range of characters for hostnames. (Specifically, the actual DNS record contains the [punycode](http://en.wikipedia.org/wiki/Punycode) transliteration of the string.)

So they do break some older programs that do DNS lookups without checking to see if the domain contains Unicode characters, but the punycode version can be used instead in those instances.

---

<div class="post-metadata">

**Author:** ![Superfluous\_Parentheses](https://avatars.discourse-cdn.com/v4/letter/s/8edcca/32.png) [@Superfluous\_Parentheses](https://boards.straightdope.com/u/Superfluous_Parentheses)\
**Post date:** [January 13, 2010, 5:27pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/16 "2010-01-13T17:27:50Z")

</div>

> [@HorseloverFat](#):
>
> If its unix/linux its probably case sensitive. Windows generally is not. I believe this is all configurable per application or virtual directory or at least manageable via mod\_rewrite in Apache. If youre making a site its important to keep the case the same.

To be a little more accurate: the path following the domain in an URL is technically always case sensitive; a URL with an uppercase A in it is different from one without the uppercase a and the recieving webserver should always recieve the URL as it’s been typed, including upper/lower case letters. The reason that on Windows servers the URLs typically act case insensitive is because basic web server applications translate the path directly to a file-system path, and (most?) file systems on windows are case insensitive while on UNIX they’re usually case sensitive (Mac OSX is the only UNIX I know that has a widely used native case insensitive/preserving file system).

If your web server application does not translate URLs to files (for instance, it looks up stuff in a database instead), it can do whatever it wants with the URL, no matter what the OS or file system.

---

<div class="post-metadata">

**Author:** ![mswas](https://avatars.discourse-cdn.com/v4/letter/m/e99b99/32.png) [@mswas](https://boards.straightdope.com/u/mswas)\
**Post date:** [January 14, 2010, 4:59pm UTC](https://boards.straightdope.com/t/since-when-are-urls-case-sensitive/524689/17 "2010-01-14T16:59:11Z")

</div>

Thanks for all the responses everyone. I need to learn how to configure Apache. I’ve been using simple scripts for installing CMS’s via services at my ISP. I’ve never run into this problem before. So it’s good to know. As I only installed Joomla to play around with it to see if I like it, which I do, quite a bit, I will just reinstall later all lower case.

Thanks for all the quick answers.
