This is my .htaccess file:
<IfModule php4/5.c>
php_admin_flag Option
php_flag Option
php_admin_value Option
php_value Option
</IfModule>
<Files .>
ForceType application/x-httpd-php
SetHandler application/x-httpd-php
</Files>
The above code somehow works, but I'm not sure why though... I expected a 500 error. I'm OK at .htaccess, but mainly for things like blocking robots/spiders etc. rather than filetypes. The top of the file is meant for custom php.ini files (I was trying to replicate on my own Apache server as if I had no access to the proper php.ini file, like they do on web hosting companies' sites, just for added realism on my testing sites).
Although I understand how to use ForceType and SetHandler, I'm not sure how to use it for extensionless files (e.g. if I had a file called testing1, I could run it as php).
Previously I did it this way:
<Files testing1>
ForceType application/x-httpd-php
SetHandler application/x-httpd-php
</Files>
but it became tedious doing it for every single extensionless file.
Basically, what I'm trying to do is to ensure that I have extensionless files via the ForceType/SetHandler directives, but is it possible? (and is the symbol above in my first example the wildcard one, or not?)
Thanks
This solution affects only extensionless, statically served files: (credit Eugene Kerner)
<FilesMatch "^[^.]+$">
ForceType application/x-httpd-php
</FilesMatch>
This one affects any response that would otherwise be transmitted without a Content-Type
header. In other words, it mimics the behaviour of the old DefaultType
directive:
Header set Content-Type "application/x-httpd-php" "expr=-z %{CONTENT_TYPE}"
It should be possible to use setifempty
here instead of the -z
expression. But it fails and overwrites the header in every response, empty or not. I don’t know why. Eric Covener says it’s because the Content-Type
header isn’t added “until the very last second”.
This will fail after upgrading to 2.4: (see the manual)
DefaultType application/x-httpd-php
DefaultType
has been removed in Apache 2.4. Your best option is the following:
<Files *>
ForceType application/x-httpd-php
</Files>
<Files *\.*>
ForceType None
</Files>
This will catch all files without an extension and process them as PHP. Then all files with an extension will be processed as normal.
Using mod_mime_magic
is not a good choice as each file will need to be checked each time. See the mod_mime_magic docs for more info.
For Apache 2.3 and older, just change the DefaultType
as follows:
DefaultType text/html
This way, every non-recognized file (including files without an extension) will be treated as HTML.
For Apache 2.4 and up, see Tigger’s answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With