非常简单的RewriteRule不起作用

I have index.php with only one line in it

<?php echo $_GET['a']; ?>

And also I have a .htaccess with only two lines in it

RewriteEngine on
RewriteRule ^([a-z]+)$ ?a=$1

Why when I enter /ab.cd I get a 404 error, but if I entering /abcd. it doesn't give me a 404 error and PHP echos abcd (without the dot on the end of the url).

Can anybody tell me why my rewrite rule allows abcd. through instead of giving me a 404 error?

EDIT:

I've just tested your Rewriterule (standalone) in my dev environment and it works. It doesn't allow /abcd. through on mine - It gives me a 404 error, so there must be something somewhere in your environment that's affecting your rules.

-initial post-

Looks like the period(.) in your /ab.cd isn't defined in the Rewriterule - just lowercase a-z chars.

Use:

RewriteEngine on
RewriteRule ^([a-z.]+)$ ?a=$1
                  ^

The regular expression you've used, ([a-z]+), matches only the lowercase letters "a" through "z". It will never match a series of letters followed by a period followed by a series of letters, like your attempt with ab.cd.

If you want to match periods as well, you need ([a-z.]+).

I just rebuilt the situation on my server and I'm getting the desired 404 error. I only added the [L] flag to the RewriteRule.

.htaccess

RewriteEngine on
RewriteRule ^([a-z]+)$ test.php?a=$1 [L]

test.php

<?php echo $_GET['a']; ?>

Are there maybe any other rewrite rules following that might interfere with your request? Even in other files that get included? In that case, the L flag might help you.