This is so weird!
Here's the rules I'm testing.
RewriteRule ^statstest/tekwav$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
RewriteRule ^statstest/tekwav.$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
RewriteRule ^statstest/.tekwav$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
RewriteRule ^statstest/.tekwav.$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
So they are all pointing the the same destination.
https://testmy.net/statstest/tekwav -- 404 not found
https://testmy.net/statstest/tekwav. -- 200 works
https://testmy.net/statstest/.tekwav -- 404 not found
https://testmy.net/statstest/.tekwav. -- 200 works
They should all work.
I went directly to the server IP and had the same result, so it's definitely not cloudflare.
lol... I think it's because your username ends in wav ... like a wav file. This probably boils down to a poorly written expression in nginx additional directives.
Here's why I have this theory.
RewriteRule ^statstest/.ekwav$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA] -- 404 not found
RewriteRule ^statstest/t.kwav$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA] -- 404 not found
RewriteRule ^statstest/te.wav$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA] -- 404 not found
RewriteRule ^statstest/tek.av$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA] -- 200 works
RewriteRule ^statstest/tekw.v$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA] -- 200 works
RewriteRule ^statstest/tekwa.$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA] -- 200 works
results in
https://testmy.net/statstest/.ekwav -- 404 not found
https://testmy.net/statstest/t.kwav -- 404 not found
https://testmy.net/statstest/te.wav -- 404 not found
https://testmy.net/statstest/tek.av -- 200 works
https://testmy.net/statstest/tekw.v -- 200 works
https://testmy.net/statstest/tekwa. -- 200 works
As I iterate through, as soon as the URL it no longer ends in "wav" it works.
Now the rule is supposed to be looking for .wav not wav
Here's the culprit. In nginx additional directives.
location ~* .(js|jpg|jpeg|gif|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg|json)$ {
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
To further test the theory that this is the culprit I add additional test rules to my .htaccess (mod_rewrite)
We'll pretend a new member has a name ending in doc and tgz -- then test with one character blocking the pattern I suspect is being detected.
RewriteRule ^statstest/tekdoc$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
RewriteRule ^statstest/tekdo.$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
RewriteRule ^statstest/tektgz$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
RewriteRule ^statstest/tektg.$ /tools/database/db_search.php?type=user_name&q=tekwav [L,QSA]
https://testmy.net/statstest/tekdoc -- 404 not found
https://testmy.net/statstest/tekdo. -- 200 works
https://testmy.net/statstest/tektgz -- 404 not found
https://testmy.net/statstest/tektg. -- 200 works
Still, I don't see a mistake in how that nginx directive is written. That should only capture if it has a preceding period. I'll have to think about this. Obviously I can just remove that rule and it will work but I have it there for a reason.
Maybe I simply need to remove the leading period and then add it to each. Like this... (update: nevermind, same result)
Yup, without that nginx directive it works. I'll try to understand why it's not working as expected and rewrite that directive and post it here for other webmasters.