1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-06 08:47:45 +02:00

[ticket/11824] Add option for mod_rewrite

PHPBB3-11824
This commit is contained in:
David King
2013-09-03 16:16:23 -07:00
parent 8d6b03c438
commit 010da72f64
8 changed files with 109 additions and 33 deletions

View File

@@ -375,6 +375,7 @@ class acp_board
'use_system_cron' => array('lang' => 'USE_SYSTEM_CRON', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'legend2' => 'PATH_SETTINGS',
'enable_mod_rewrite' => array('lang' => 'MOD_REWRITE_ENABLE', 'validate' => 'bool', 'type' => 'custom', 'method' => 'enable_mod_rewrite', 'explain' => true),
'smilies_path' => array('lang' => 'SMILIES_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true),
'icons_path' => array('lang' => 'ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true),
'upload_icons_path' => array('lang' => 'UPLOAD_ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true),
@@ -994,4 +995,51 @@ class acp_board
$cache->destroy('sql', FORUMS_TABLE);
}
/**
* Option to enable/disable removal of 'app.php' from URLs
*
* Note that if mod_rewrite is on, URLs without app.php will still work,
* but any paths generated by the controller helper url() method will
* contain app.php.
*
* @param int $value The current config value
* @param string $key The config key
* @return string The HTML for the form field
*/
function enable_mod_rewrite($value, $key)
{
global $user, $config;
// Determine whether mod_rewrite is enabled on the server
// NOTE: This only works on Apache servers on which PHP is NOT
// installed as CGI. In that case, there is no way for PHP to
// determine whether or not the Apache module is enabled.
//
// To be clear on the value of $mod_rewite:
// null = Cannot determine whether or not the server has mod_rewrite
// enabled
// false = Can determine that the server does NOT have mod_rewrite
// enabled
// true = Can determine that the server DOES have mod_rewrite_enabled
$mod_rewrite = null;
if (function_exists('apache_get_modules'))
{
$mod_rewrite = (bool) in_array('mod_rewrite', apache_get_modules());
}
// If $message is false, mod_rewrite is enabled.
// Otherwise, it is not and we need to:
// 1) disable the form field
// 2) make sure the config value is set to 0
// 3) append the message to the return
$value = ($mod_rewrite === false) ? 0 : $value;
$message = $mod_rewrite === null ? 'MOD_REWRITE_INFORMATION_UNAVAILABLE' : ($mod_rewrite === false ? 'MOD_REWRITE_DISABLED' : false);
// Let's do some friendly HTML injection if we want to disable the
// form field because h_radio() has no pretty way of doing so
$field_name = 'config[enable_mod_rewrite]' . ($message === 'MOD_REWRITE_DISABLED' ? '" disabled="disabled' : '');
return h_radio($field_name, array(1 => 'YES', 0 => 'NO'), $value) .
($message !== false ? '<br /><span>' . $user->lang($message) . '</span>' : '');
}
}

View File

@@ -5733,6 +5733,7 @@ function phpbb_create_symfony_request(phpbb_request $request)
*/
function phpbb_get_web_root_path(Request $symfony_request, $phpbb_root_path = '')
{
global $config, $phpEx, $request;
static $path;
if (null !== $path)
{
@@ -5748,9 +5749,8 @@ function phpbb_get_web_root_path(Request $symfony_request, $phpbb_root_path = ''
$corrections = substr_count($path_info, '/');
// When URL Rewriting is enabled, app.php is optional. We have to
// correct for it not being there
if (strpos($symfony_request->getRequestUri(), $symfony_request->getScriptName()) === false)
// We need to account for whether or not app.php is in the URL
if (strpos($symfony_request->server->get('REQUEST_URI', ''), 'app.' . $phpEx) !== false)
{
$corrections -= 1;
}