|
Posted by Justin Koivisto on 09/27/85 11:37
d wrote:
> "Justin Koivisto" <justin@koivi.com> wrote in message
> news:8fGdnfvFR67enVDeRVn-ow@onvoy.com...
>> d wrote:
>>> "wd" <n23@nospam.invalid> wrote in message
>>> news:pan.2006.01.17.11.23.23.321125@nospam.invalid...
>>>> I want my server to send a 404 header if a URL with a query string is
>>>> requested. So if a browser or spider requests something
>>>> like
>>>> www. my_site .com?p=chair
>>>> they would get a 404...
>>>>
>>>> But if they request
>>>> www. my_site .com/chair.htm
>>>> everything would be normal.
>>>>
>>>> With some assistance this is what I have so far, but it isn't working
>>>> correctly. It always displays the 404, even when there is no question
>>>> mark in the URL. Also, I would like the page to stop displaying
>>>> anything
>>>> after the "HTML>>>" if it sends the 404 error, but I'm not sure how to
>>>> do
>>>> it:
>>>>
>>>> if (isset($_SERVER["QUERY_STRING"])) {
>>>> header("HTTP/1.0 404 Not Found");
>> [snip]
>>
>>> That's because $_SERVER["QUERY_STRING"] is *always* set, regardless of
>>> whether there's a query string or not.
>> Not true. With apache, QUERY_STRING will always be set; however, with
>> other web server software (ie. MS IIS) it will never be set unless you
>> have done so yourself.
>
> Incorrect. I tested it with Apache and IIS. BOTH have
> $_SERVER["QUERY_STRING"] set regardless of whether a query string is present
> or not.
Just because your IIS server has it does not mean that is the default.
My install (and every other install that I have used) does not *ever*
have it set. My version is (as reported by $_SERVER['SERVER_SOFTWARE'])
"Microsoft-IIS/5.1"
>> Therefore, to be more portable, you may want to do something more like
>> this:
>>
>> if(isset($_GET) && is_array($_GET) && count($_GET)){
>> header("HTTP/1.0 404 Not Found");
>> echo <<< HTML
>> <html>
>> <head>
>> <title>404 Not Found</title>
>> </head>
>> <body>
>> <h1>Not Found</h1>
>> The requested URL was not found on this server.
>> </body>
>> </html>
>> HTML;
>> exit;
>> }
>
> I don't want to sound rude, but that's ridiculous.
....but you just did.
> Just check to see if
> $_SERVER["QUERY_STRING"] is a non-empty string. If it is, then hey-presto,
> you're set. You don't need to call isset, is_array and count all in one go.
And then when you install to another server like Netscape? Zues? AOL?
Roxen? thttpd? The list goes on. You cannot *expect* a server to have
$_SERVER['QUERY_STRING'] set in all cases.
--
Justin Koivisto, ZCE - justin@koivi.com
http://koivi.com
Navigation:
[Reply to this message]
|