How to check if mod_rewrite is enabled in php?
If you're using mod_php, you can use apache_get_modules()
. This will return an array of all enabled modules, so to check if mod_rewrite
is enabled, you could simply do
in_array('mod_rewrite', apache_get_modules());
Unfortunately, you're most likely trying to do this with CGI, which makes it a little bit more difficult.
You can test it using the following, though
strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false
If the above condition evaluates to true
, then mod_write
is enabled.
Copy this piece of code and run it to find out.
<?php if(!function_exists('apache_get_modules') ){ phpinfo(); exit; } $res = 'Module Unavailable'; if(in_array('mod_rewrite',apache_get_modules())) $res = 'Module Available';?><html><head><title>A mod_rewrite availability check !</title></head><body><p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p></body></html>
I like Christian Roy's solution:
### .htaccess<IfModule mod_rewrite.c> # Tell PHP that the mod_rewrite module is ENABLED. SetEnv HTTP_MOD_REWRITE On RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # The rest of your rewrite rules here</IfModule>
Then, you can check in your PHP code for
array_key_exists('HTTP_MOD_REWRITE', $_SERVER);
No idea if this works also with IIS (I have no way to check) but the odds are good.