├── cache └── .gitkeep ├── htmods └── .gitkeep ├── .gitignore ├── img └── phpbb-seo.png ├── language ├── index.htm ├── en │ ├── info_acp_usu.php │ ├── acp_usu_install.php │ └── acp_usu.php ├── it │ ├── info_acp_usu.php │ └── acp_usu_install.php └── fr │ ├── info_acp_usu.php │ ├── acp_usu_install.php │ └── acp_usu.php ├── ext.php ├── tests ├── mock │ ├── user.php │ ├── cache.php │ ├── auth.php │ └── request.php ├── core │ ├── get_url_info_test_.php │ ├── prepare_url_test.php │ ├── query_string_test.php │ ├── format_url_test.php │ ├── set_user_url_test.php │ ├── prepare_topic_url_test.php │ └── drop_sid_test.php ├── phpbb_seo_test_case.php └── core.php ├── styles ├── prosilver │ └── template │ │ └── event │ │ └── posting_editor_subject_after.html ├── subsilver2 │ └── template │ │ └── event │ │ └── posting_editor_subject_after.html └── all │ └── template │ ├── event │ └── overall_footer_after.html │ └── phpbb_seo.js ├── README.md ├── travis └── prepare-phpbb.sh ├── config └── services.yml ├── composer.json ├── phpunit.xml.dist ├── acp └── usu_info.php ├── .travis.yml ├── adm └── style │ └── event │ └── acp_overall_footer_after.html ├── migrations ├── release_2_0_0_b2.php └── release_2_0_0_b1.php ├── customise.php ├── rewriter.php └── event └── listener.php /cache/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /htmods/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /cache/* 2 | /htmods/* 3 | *.swp 4 | -------------------------------------------------------------------------------- /img/phpbb-seo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpBBSEO/usu/HEAD/img/phpbb-seo.png -------------------------------------------------------------------------------- /language/index.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ext.php: -------------------------------------------------------------------------------- 1 | 11 | 12 |
13 |
14 |
15 |
16 | 17 | -------------------------------------------------------------------------------- /styles/subsilver2/template/event/posting_editor_subject_after.html: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | URL{L_COLON} 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # phpBB SEO - Ultimate SEO URL 2 | 3 | Ultimate SEO URL is an Extension for phpBB 3.1. 4 | 5 | # Continuous Integration 6 | 7 | We have unit and functional tests in order to prevent regressions. These tests are performed by [Travis CI](http://travis-ci.org/). 8 | 9 | Build Status: [![Build Status](https://secure.travis-ci.org/phpBBSEO/usu.png?branch=master)](http://travis-ci.org/phpBBSEO/usu) 10 | 11 | ## Collaborate 12 | 13 | * Fork the repository 14 | * Create a issue in the [tracker](https://github.com/phpBBSEO/usu/issues) 15 | * Submit a [pull-request](https://github.com/phpBBSEO/usu/pulls) 16 | -------------------------------------------------------------------------------- /travis/prepare-phpbb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This file is part of the phpBB Forum Software package. 4 | # 5 | # @copyright (c) phpBB Limited 6 | # @license GNU General Public License, version 2 (GPL-2.0) 7 | # 8 | # For full copyright and license information, please see 9 | # the docs/CREDITS.txt file. 10 | # 11 | set -e 12 | set -x 13 | 14 | EXTNAME=$1 15 | BRANCH=$2 16 | EXTPATH_TEMP=$3 17 | 18 | # Copy extension to a temp folder 19 | mkdir ../../tmp 20 | cp -R . ../../tmp 21 | cd ../../ 22 | 23 | # Clone phpBB 24 | git clone --depth=1 "git://github.com/phpbb/phpbb.git" "phpBB3" --branch=$BRANCH 25 | -------------------------------------------------------------------------------- /tests/mock/cache.php: -------------------------------------------------------------------------------- 1 | 11 | 25 | 26 | -------------------------------------------------------------------------------- /tests/core/get_url_info_test_.php: -------------------------------------------------------------------------------- 1 | 'topic', 19 | 'url' => 'welcome-to-phpbb3', 20 | 'info' => 'title', 21 | 'expected' => array(), 22 | ), 23 | ); 24 | } 25 | 26 | /** 27 | * @dataProvider get_url_info_test_data 28 | */ 29 | function test_get_url_info($type, $url, $info, $expected) 30 | { 31 | //$this->markTestIncomplete('.'); 32 | 33 | $this->configure(); 34 | $this->assertEquals($expected, $this->phpbb_seo->get_url_info($type, $url, $info)); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /config/services.yml: -------------------------------------------------------------------------------- 1 | # 2 | # @package Ultimate SEO URL phpBB SEO 3 | # @version $$ 4 | # @copyright (c) 2014 www.phpbb-seo.com 5 | # @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 6 | # 7 | # You must indent with 4 spaces instead of 1 tab 8 | # 9 | services: 10 | phpbbseo.usu.core: 11 | class: phpbbseo\usu\core 12 | arguments: 13 | - @config 14 | - @request 15 | - @user 16 | - @auth 17 | - %core.root_path% 18 | - %core.php_ext% 19 | 20 | phpbbseo.usu.listener: 21 | class: phpbbseo\usu\event\listener 22 | arguments: 23 | - @phpbbseo.usu.core 24 | - @config 25 | - @auth 26 | - @template 27 | - @user 28 | - @request 29 | - @dbal.conn 30 | - %core.root_path% 31 | - %core.php_ext% 32 | tags: 33 | - { name: event.listener } 34 | 35 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "phpbbseo/usu", 3 | "type": "phpbb-extension", 4 | "description": "phpBB SEO Ultimate SEO URL for phpBB 3.1", 5 | "homepage": "http://www.phpbb-seo.com/", 6 | "keywords": ["phpbbSEO", "extension", "seo", "USU"], 7 | "version": "2.0.0-b2", 8 | "time": "2014-09-12", 9 | "license": "GPL-2.0", 10 | "authors": [ 11 | { 12 | "name": "dcz", 13 | "email": "dcz@phpbb-seo.com", 14 | "homepage": "http://www.phpbb-seo.com/", 15 | "role": "Lead Developer" 16 | }, 17 | { 18 | "name": "Carlo", 19 | "email": "carlo@phpbbitalia.net", 20 | "homepage": "http://www.phpbbitalia.net/", 21 | "role": "Developer" 22 | } 23 | ], 24 | "require": { 25 | "php": ">=5.3.3" 26 | }, 27 | "extra": { 28 | "display-name": "phpBB SEO Ultimate SEO URL", 29 | "soft-require": { 30 | "phpbb/phpbb": ">=3.1.0-RC2" 31 | }, 32 | "version-check": { 33 | "host": "version.phpbb-seo.com", 34 | "directory": "/", 35 | "filename": "usu.json" 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /tests/core/prepare_url_test.php: -------------------------------------------------------------------------------- 1 | 'topic', 19 | 'title' => 'This is the topic Title', 20 | 'id' => 123, 21 | 'expected' => '/this-is-the-topic-title-t123', 22 | ), 23 | array( 24 | 'type' => 'topic', 25 | 'title' => '', 26 | 'id' => 321, 27 | 'expected' => '/topic-t321', 28 | ), 29 | ); 30 | } 31 | 32 | /** 33 | * @dataProvider prepare_url_test_data 34 | */ 35 | function test_prepare_url($type, $title, $id, $expected) 36 | { 37 | $this->configure(); 38 | $this->assertEquals($expected, $this->phpbb_seo->prepare_url($type, $title, $id)); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /tests/core/query_string_test.php: -------------------------------------------------------------------------------- 1 | array( 19 | 'var1' => 'bar', 20 | 'var2' => 'foo', 21 | ), 22 | 'expected' => '?var1=bar&var2=foo', 23 | ), 24 | array( 25 | 'case' => array( 26 | 'var3' => 1, 27 | 'var4' => 'foo', 28 | 'var5' => '', 29 | ), 30 | 'expected' => '?var3=1&var4=foo&var5=', 31 | ), 32 | ); 33 | } 34 | 35 | /** 36 | * @dataProvider query_string_test_data 37 | */ 38 | function test_query_string($case, $expected) 39 | { 40 | $this->configure(); 41 | $this->assertEquals($expected, $this->phpbb_seo->query_string($case)); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /tests/core/format_url_test.php: -------------------------------------------------------------------------------- 1 | 'This is a test', 19 | 'expected' => 'this-is-a-test', 20 | ), 21 | array( 22 | 'case' => 'phpBB & SEO', 23 | 'expected' => 'phpbb-seo', 24 | ), 25 | array( 26 | 'case' => '&.-', 27 | 'expected' => 'topic', 28 | ), 29 | array( 30 | 'case' => '&.-', 31 | 'expected' => 'forum', 32 | 'type' => 'forum', 33 | ), 34 | ); 35 | } 36 | 37 | /** 38 | * @dataProvider format_url_test_data 39 | */ 40 | function test_format_url($case, $expected, $type = 'topic') 41 | { 42 | $this->configure(); 43 | $this->assertEquals($expected, $this->phpbb_seo->format_url($case, $type)); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 15 | 16 | 17 | ./tests 18 | ./tests/functional 19 | 20 | 21 | ./tests/functional/ 22 | 23 | 24 | 25 | 26 | 27 | ./tests/ 28 | 29 | 30 | ./ 31 | 32 | ./language/ 33 | ./migrations/ 34 | ./tests/ 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /tests/mock/auth.php: -------------------------------------------------------------------------------- 1 | '\phpbbseo\usu\acp\usu', 19 | 'title' => 'ACP_CAT_PHPBB_SEO', 20 | 'version' => '2.0.0-b2', 21 | 'modes' => array( 22 | 'settings' => array( 23 | 'title' => 'ACP_PHPBB_SEO_CLASS', 24 | 'auth' => 'ext_phpbbseo/usu && acl_a_board', 25 | 'cat' => array('ACP_MOD_REWRITE') 26 | ), 27 | 'forum_url' => array( 28 | 'title' => 'ACP_FORUM_URL', 29 | 'auth' => 'ext_phpbbseo/usu && acl_a_board', 30 | 'cat' => array('ACP_MOD_REWRITE') 31 | ), 32 | 'server' => array( 33 | 'title' => 'ACP_REWRITE_CONF', 34 | 'auth' => 'ext_phpbbseo/usu && acl_a_board', 35 | 'cat' => array('ACP_MOD_REWRITE') 36 | ), 37 | 'sync_url' => array( 38 | 'title' => 'ACP_SYNC_URL', 39 | 'auth' => 'ext_phpbbseo/usu && acl_a_board', 40 | 'cat' => array('ACP_MOD_REWRITE') 41 | ), 42 | 'extended' => array( 43 | 'title' => 'ACP_SEO_EXTENDED', 44 | 'auth' => 'ext_phpbbseo/usu && acl_a_board', 45 | 'cat' => array('ACP_MOD_REWRITE') 46 | ), 47 | )); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /tests/core/set_user_url_test.php: -------------------------------------------------------------------------------- 1 | 'bar', 19 | 'user_id' => 1, 20 | 'expected' => array( 21 | 'member1', 22 | 'bar-u1', 23 | 'member/bar', 24 | ), 25 | ), 26 | ); 27 | } 28 | 29 | /** 30 | * @dataProvider set_user_url_test_data 31 | */ 32 | function test_set_user_url($username, $user_id, $expected) 33 | { 34 | $this->configure(); 35 | $this->phpbb_seo->set_user_url($username, $user_id); 36 | $this->assertEquals($expected[0], $this->phpbb_seo->seo_url['user'][$user_id]); 37 | 38 | unset($this->phpbb_seo->seo_url['user'][$user_id]); 39 | 40 | $this->configure(array('profile_inj' => true)); 41 | $this->phpbb_seo->set_user_url($username, $user_id); 42 | $this->assertEquals($expected[1], $this->phpbb_seo->seo_url['user'][$user_id]); 43 | 44 | unset($this->phpbb_seo->seo_url['user'][$user_id]); 45 | 46 | $this->configure(array('profile_inj' => true, 'profile_noids' => true)); 47 | $this->phpbb_seo->set_user_url($username, $user_id); 48 | $this->assertEquals($expected[2], $this->phpbb_seo->seo_url['user'][$user_id]); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /tests/mock/request.php: -------------------------------------------------------------------------------- 1 | array( 19 | 'topic_id' => 1, 20 | 'forum_id' => 1, 21 | 'topic_title' => 'Welcome to phpBB3', 22 | 'topic_type' => POST_NORMAL, 23 | ), 24 | 'expected' => array( 25 | 1 => '/welcome-to-phpbb3-t1', 26 | 2 => '/welcome-phpbb3-t1', 27 | ), 28 | ), 29 | array( 30 | 'topic_data' => array( 31 | 'topic_id' => 23, 32 | 'forum_id' => 43, 33 | 'topic_title' => 'This is a global announcment', 34 | 'topic_type' => POST_GLOBAL, 35 | ), 36 | 'expected' => array( 37 | 1 => 'announces/this-is-a-global-announcment-t23', 38 | 2 => 'announces/this-global-announcment-t23', 39 | ), 40 | ), 41 | ); 42 | } 43 | 44 | /** 45 | * @dataProvider prepare_topic_url_test_data 46 | */ 47 | function test_prepare_topic_url($topic_data, $expected) 48 | { 49 | $this->configure(); 50 | $this->assertEquals($expected[1], $this->phpbb_seo->prepare_topic_url($topic_data)); 51 | 52 | $this->configure(array( 53 | 'rem_small_words' => true, 54 | )); 55 | $this->assertEquals($expected[2], $this->phpbb_seo->prepare_topic_url($topic_data)); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | matrix: 4 | include: 5 | - php: 5.3.3 6 | env: DB=mysqli 7 | - php: 5.3 8 | env: DB=mysqli # MyISAM 9 | - php: 5.4 10 | env: DB=mysqli 11 | - php: 5.4 12 | env: DB=mysql 13 | - php: 5.4 14 | env: DB=mariadb 15 | - php: 5.4 16 | env: DB=postgres 17 | - php: 5.4 18 | env: DB=sqlite3 19 | - php: 5.5 20 | env: DB=mysqli 21 | - php: 5.6 22 | env: DB=mysqli 23 | - php: hhvm 24 | env: DB=mysqli 25 | allow_failures: 26 | - php: hhvm 27 | fast_finish: true 28 | 29 | env: 30 | global: 31 | - EXTNAME="phpbbseo/usu" # CHANGE name of the extension HERE 32 | - SNIFF="1" # Should we run code sniffer on your code? 33 | - IMAGE_ICC="1" # Should we run icc profile sniffer on your images? 34 | - PHPBB_BRANCH="develop-ascraeus" 35 | 36 | branches: 37 | only: 38 | - master 39 | - develop 40 | - /^develop-.*$/ 41 | 42 | install: 43 | - travis/prepare-phpbb.sh $EXTNAME $PHPBB_BRANCH 44 | - cd ../../phpBB3 45 | - travis/prepare-extension.sh $EXTNAME $PHPBB_BRANCH 46 | - travis/setup-phpbb.sh $DB $TRAVIS_PHP_VERSION 47 | 48 | before_script: 49 | - travis/setup-database.sh $DB $TRAVIS_PHP_VERSION 50 | 51 | script: 52 | - sh -c "if [ '$SNIFF' != '0' ]; then travis/ext-sniff.sh $DB $TRAVIS_PHP_VERSION $EXTNAME; fi" 53 | - sh -c "if [ '$IMAGE_ICC' != '0' ]; then travis/check-image-icc-profiles.sh $DB $TRAVIS_PHP_VERSION; fi" 54 | - phpBB/vendor/bin/phpunit --configuration phpBB/ext/$EXTNAME/travis/phpunit-$DB-travis.xml --bootstrap ./tests/bootstrap.php 55 | -------------------------------------------------------------------------------- /adm/style/event/acp_overall_footer_after.html: -------------------------------------------------------------------------------- 1 | 11 | 12 | 53 | 54 | -------------------------------------------------------------------------------- /tests/phpbb_seo_test_case.php: -------------------------------------------------------------------------------- 1 | 'localhost', 30 | 'server_port' => 80, 31 | 'script_path' => '/', 32 | )); 33 | 34 | $request = new \phpbbseo\usu\tests\mock\request(); 35 | $user = new \phpbbseo\usu\tests\mock\user(); 36 | $auth = new \phpbbseo\usu\tests\mock\auth(); 37 | $cache = new \phpbbseo\usu\tests\mock\cache(); 38 | 39 | return $this->configure(); 40 | } 41 | 42 | protected function configure($settings = array(), $forum_urls = array()) 43 | { 44 | global $phpbb_root_path, $phpEx, $config, $request, $user, $auth, $cache; 45 | global $tc_settings, $tc_forum_urls; 46 | 47 | $tc_settings = array(); 48 | $tc_forum_urls = array(); 49 | 50 | $tc_settings = $settings; 51 | $tc_forum_urls = $forum_urls; 52 | 53 | $this->phpbb_seo = new \phpbbseo\usu\tests\core($config, $request, $user, $auth, $phpbb_root_path, $phpEx); 54 | 55 | return $this->phpbb_seo; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /tests/core.php: -------------------------------------------------------------------------------- 1 | seo_opt = array( 23 | 'url_rewrite' => true, 24 | 'modrtype' => 3, 25 | 'sql_rewrite' => false, 26 | 'profile_inj' => false, 27 | 'profile_vfolder' => false, 28 | 'profile_noids' => false, 29 | 'rewrite_usermsg' => false, 30 | 'rewrite_files' => false, 31 | 'rem_sid' => false, 32 | 'rem_hilit' => true, 33 | 'rem_small_words' => false, 34 | 'virtual_folder' => true, 35 | 'virtual_root' => false, 36 | 'cache_layer' => true, 37 | 'rem_ids' => false, 38 | 'redirect_404_forum' => false, 39 | 'zero_dupe' => array( 40 | 'on' => true, 41 | 'strict' => true, 42 | 'post_redir' => 'all', 43 | ), 44 | ); 45 | 46 | $this->cache_config['forum_urls'] = array(); 47 | 48 | $this->cache_config['settings'] = & $tc_settings; 49 | $this->cache_config['forum_urls'] = & $tc_forum_urls; 50 | $this->cache_config['cached'] = true; 51 | $this->seo_opt = array_replace_recursive($this->seo_opt, $tc_settings); 52 | $this->modrtype = @isset($this->seo_opt['modrtype']) ? $this->seo_opt['modrtype'] : $this->modrtype; 53 | 54 | if ($this->modrtype > 1) 55 | { 56 | $this->seo_url['forum'] = & $this->cache_config['forum_urls']; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /migrations/release_2_0_0_b2.php: -------------------------------------------------------------------------------- 1 | config['seo_usu_version'])) 18 | { 19 | return version_compare($this->config['seo_usu_version'], '2.0.0-b2', '>='); 20 | } 21 | 22 | return false; 23 | } 24 | 25 | static public function depends_on() 26 | { 27 | return array('\phpbbseo\usu\migrations\release_2_0_0_b1'); 28 | } 29 | 30 | public function update_data() 31 | { 32 | return array( 33 | array('config.add', array('seo_usu_version', '2.0.0-b2')), 34 | array( 35 | 'module.remove', 36 | array( 37 | 'acp', 38 | 'ACP_MOD_REWRITE', 39 | array( 40 | 'module_basename' => '\phpbbseo\usu\acp\usu', 41 | 'module_langname' => 'ACP_HTACCESS', 42 | 'module_mode' => 'htaccess', 43 | 'module_auth' => 'ext_phpbbseo/usu && acl_a_board', 44 | ), 45 | ) 46 | ), 47 | array( 48 | 'module.add', 49 | array( 50 | 'acp', 51 | 'ACP_MOD_REWRITE', 52 | array( 53 | 'module_basename' => '\phpbbseo\usu\acp\usu', 54 | 'module_langname' => 'ACP_REWRITE_CONF', 55 | 'module_mode' => 'server', 56 | 'module_auth' => 'ext_phpbbseo/usu && acl_a_board', 57 | ), 58 | ) 59 | ), 60 | array( 61 | 'module.add', 62 | array( 63 | 'acp', 64 | 'ACP_MOD_REWRITE', 65 | array( 66 | 'module_basename' => '\phpbbseo\usu\acp\usu', 67 | 'module_langname' => 'ACP_SYNC_URL', 68 | 'module_mode' => 'sync_url', 69 | 'module_auth' => 'ext_phpbbseo/usu && acl_a_board', 70 | ), 71 | ) 72 | ), 73 | ); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /tests/core/drop_sid_test.php: -------------------------------------------------------------------------------- 1 | 'http://www.example.com/path/page.ext?sid=%1$s', 23 | 'expected' => 'http://www.example.com/path/page.ext', 24 | ), 25 | array( 26 | 'case' => 'http://www.example.com/path/page.ext?sid=%1$s&var1=val1&var2=val2', 27 | 'expected' => 'http://www.example.com/path/page.ext?var1=val1&var2=val2', 28 | ), 29 | array( 30 | 'case' => 'http://www.example.com/path/page.ext?var1=val1&var2=val2&sid=%1$s', 31 | 'expected' => 'http://www.example.com/path/page.ext?var1=val1&var2=val2', 32 | ), 33 | array( 34 | 'case' => 'http://www.example.com/path/page.ext?var1=val1&var2=val2&sid=%1$s&var3=val3', 35 | 'expected' => 'http://www.example.com/path/page.ext?var1=val1&var2=val2&var3=val3', 36 | ), 37 | ); 38 | 39 | // generate all sub cases 40 | $data = array(); 41 | 42 | foreach ($base_cases as $test) 43 | { 44 | extract($test); 45 | 46 | // test & if appropriate 47 | $expected_amp = ''; 48 | 49 | if (strpos($case, '&') !== false) 50 | { 51 | $expected_amp = str_replace('&', '&', $expected); 52 | } 53 | 54 | // generate all sid cases 55 | foreach ($sids as $sid) 56 | { 57 | $_case = sprintf($case, $sid); 58 | 59 | $data[] = array( 60 | 'case' => $_case, 61 | 'expected' => $expected, 62 | ); 63 | 64 | // also test & if appropriate 65 | if ($expected_amp) 66 | { 67 | $case_amp = str_replace('&', '&', $_case); 68 | 69 | $data[] = array( 70 | 'case' => $case_amp, 71 | 'expected' => $expected_amp, 72 | ); 73 | } 74 | } 75 | } 76 | 77 | return $data; 78 | } 79 | /** 80 | * @dataProvider drop_sid_test_data 81 | */ 82 | function test_drop_sid($case, $expected) 83 | { 84 | $this->configure(); 85 | $this->assertEquals($expected, $this->phpbb_seo->drop_sid($case)); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /language/en/info_acp_usu.php: -------------------------------------------------------------------------------- 1 | 'phpBB SEO', 39 | 'ACP_MOD_REWRITE' => 'URL Rewriting settings', 40 | 'ACP_PHPBB_SEO_CLASS' => 'phpBB SEO Class settings', 41 | 'ACP_FORUM_URL' => 'Forum URL Management', 42 | 'ACP_REWRITE_CONF' => 'Server Config', 43 | 'ACP_SEO_EXTENDED' => 'Extended config', 44 | 'ACP_SYNC_URL' => 'URL Synchronization', 45 | 'ACP_PREMOD_UPDATE' => '

Release announcement

46 |

This update does only concern the premod, not the phpBB core.

47 |

A new version of the phpBB SEO premod is thus available : %1$s
Make sure you visitthe release thread and update your installation.

', 48 | 'SEO_LOG_INSTALL_PHPBB_SEO' => 'phpBB SEO mod rewrite installed (v%s)', 49 | 'SEO_LOG_INSTALL_PHPBB_SEO_FAIL' => 'phpBB SEO mod rewrite install attempt failed
%s', 50 | 'SEO_LOG_UNINSTALL_PHPBB_SEO' => 'phpBB SEO mod rewrite uninstalled (v%s)', 51 | 'SEO_LOG_UNINSTALL_PHPBB_SEO_FAIL' => 'phpBB SEO mod rewrite uninstall attempts failed
%s', 52 | 'SEO_LOG_CONFIG_SETTINGS' => 'Altered phpBB SEO Class settings', 53 | 'SEO_LOG_CONFIG_FORUM_URL' => 'Altered Forum URLs', 54 | 'SEO_LOG_CONFIG_HTACCESS' => 'Generated new .htaccess', 55 | 'SEO_LOG_CONFIG_EXTENDED' => 'Altered phpBB SEO extended config', 56 | )); 57 | -------------------------------------------------------------------------------- /language/it/info_acp_usu.php: -------------------------------------------------------------------------------- 1 | 'phpBB SEO', 39 | 'ACP_MOD_REWRITE' => 'Impostazioni riscrittura degli URL', 40 | 'ACP_PHPBB_SEO_CLASS' => 'Impostazioni phpBB SEO Class', 41 | 'ACP_FORUM_URL' => 'Gestione URL forum', 42 | 'ACP_REWRITE_CONF' => 'Configurazione server', 43 | 'ACP_SEO_EXTENDED' => 'Configurazione estesa', 44 | 'ACP_SYNC_URL' => 'Sincronizzazione URL', 45 | 'ACP_PREMOD_UPDATE' => '

Annuncio di rilascio

46 |

Questo aggiornamento riguarda soltanto la Premod e non il core del phpBB.

47 |

Una nuova versione della Premod phpBB SEO è disponibile: %1$s
Visita l’argomento di rilascio e aggiorna la tua installazione

', 48 | 'SEO_LOG_INSTALL_PHPBB_SEO' => 'phpBB SEO MOD rewrite installata (v%s)', 49 | 'SEO_LOG_INSTALL_PHPBB_SEO_FAIL' => 'Installazione di phpBB SEO MOD rewrite fallita
%s', 50 | 'SEO_LOG_UNINSTALL_PHPBB_SEO' => 'phpBB SEO MOD rewrite disinstallata (v%s)', 51 | 'SEO_LOG_UNINSTALL_PHPBB_SEO_FAIL' => 'Disinstallazione di phpBB SEO MOD rewrite fallita
%s', 52 | 'SEO_LOG_CONFIG_SETTINGS' => 'Modificate le impostazioni di phpBB SEO Class', 53 | 'SEO_LOG_CONFIG_FORUM_URL' => 'Modificati gli URL del Forum', 54 | 'SEO_LOG_CONFIG_HTACCESS' => 'Generato un nuovo file .htaccess', 55 | 'SEO_LOG_CONFIG_EXTENDED' => 'Modificata la configurazione estesa phpBB SEO', 56 | )); 57 | -------------------------------------------------------------------------------- /language/fr/info_acp_usu.php: -------------------------------------------------------------------------------- 1 | 'phpBB SEO', 39 | 'ACP_MOD_REWRITE' => 'Réécriture d’url', 40 | 'ACP_PHPBB_SEO_CLASS' => 'Configuration de la classe phpBB SEO', 41 | 'ACP_FORUM_URL' => 'Configuration des URLs des forums', 42 | 'ACP_REWRITE_CONF' => 'Config Serveur', 43 | 'ACP_SEO_EXTENDED' => 'Configuration additionnelle', 44 | 'ACP_SYNC_URL' => 'Synchronisation des URLs', 45 | 'ACP_PREMOD_UPDATE' => '

Annonce de mise à jour

46 |

Cette mise à jour ne concerne que la premod, pas phpBB lui même.

47 |

Une nouvelle version de la premod phpBB SEO est donc disponible : %1$s
Veuillez vous rendre sur le sujet de mise à disposition pour procéder à la mise à jour.

', 48 | 'SEO_LOG_INSTALL_PHPBB_SEO' => 'Installation du mod rewrite phpBB SEO (v%s)', 49 | 'SEO_LOG_INSTALL_PHPBB_SEO_FAIL' => 'Echec de l’installation du mod rewrite phpBB SEO
%s', 50 | 'SEO_LOG_UNINSTALL_PHPBB_SEO' => 'Désinstallation du mod rewrite phpBB SEO (v%s)', 51 | 'SEO_LOG_UNINSTALL_PHPBB_SEO_FAIL' => 'Echec de la désinstallation du mod rewrite phpBB SEO
%s', 52 | 'SEO_LOG_CONFIG_SETTINGS' => 'Modification des réglages de la classe phpBB SEO', 53 | 'SEO_LOG_CONFIG_FORUM_URL' => 'Modification des URLs des Forum', 54 | 'SEO_LOG_CONFIG_HTACCESS' => 'Nouveau .htaccess généré', 55 | 'SEO_LOG_CONFIG_EXTENDED' => 'Modification des réglages additionnels des mods phpBB SEO', 56 | )); 57 | -------------------------------------------------------------------------------- /migrations/release_2_0_0_b1.php: -------------------------------------------------------------------------------- 1 | config['seo_usu_on'])) 18 | { 19 | return $this->db_tools->sql_column_exists($this->table_prefix . 'topics', 'topic_url'); 20 | } 21 | 22 | return false; 23 | } 24 | 25 | static public function depends_on() 26 | { 27 | return array('\phpbb\db\migration\data\v310\rc1'); 28 | } 29 | 30 | public function update_schema() 31 | { 32 | return array( 33 | 'add_columns' => array( 34 | TOPICS_TABLE => array( 35 | 'topic_url' => array('VCHAR:255', ''), 36 | ), 37 | ), 38 | ); 39 | } 40 | 41 | public function revert_schema() 42 | { 43 | return array( 44 | 'drop_columns' => array( 45 | TOPICS_TABLE => array( 46 | 'topic_url', 47 | ), 48 | ), 49 | ); 50 | } 51 | 52 | public function update_data() 53 | { 54 | return array( 55 | array('config.add', array('seo_usu_on', 1)), 56 | array( 57 | 'module.add', 58 | array( 59 | 'acp', 60 | '', 61 | array( 62 | 'module_langname' => 'ACP_CAT_PHPBB_SEO', 63 | ), 64 | ) 65 | ), 66 | array( 67 | 'module.add', 68 | array( 69 | 'acp', 70 | 'ACP_CAT_PHPBB_SEO', 71 | array( 72 | 'module_langname' => 'ACP_MOD_REWRITE', 73 | ), 74 | ) 75 | ), 76 | array( 77 | 'module.add', 78 | array( 79 | 'acp', 80 | 'ACP_MOD_REWRITE', 81 | array( 82 | 'module_basename' => '\phpbbseo\usu\acp\usu', 83 | 'module_langname' => 'ACP_PHPBB_SEO_CLASS', 84 | 'module_mode' => 'settings', 85 | 'module_auth' => 'ext_phpbbseo/usu && acl_a_board', 86 | ), 87 | ) 88 | ), 89 | array( 90 | 'module.add', 91 | array( 92 | 'acp', 93 | 'ACP_MOD_REWRITE', 94 | array( 95 | 'module_basename' => '\phpbbseo\usu\acp\usu', 96 | 'module_langname' => 'ACP_FORUM_URL', 97 | 'module_mode' => 'forum_url', 98 | 'module_auth' => 'ext_phpbbseo/usu && acl_a_board', 99 | ), 100 | ), 101 | ), 102 | array( 103 | 'module.add', 104 | array( 105 | 'acp', 106 | 'ACP_MOD_REWRITE', 107 | array( 108 | 'module_basename' => '\phpbbseo\usu\acp\usu', 109 | 'module_langname' => 'ACP_HTACCESS', 110 | 'module_mode' => 'htaccess', 111 | 'module_auth' => 'ext_phpbbseo/usu && acl_a_board', 112 | ), 113 | ) 114 | ), 115 | array( 116 | 'module.add', 117 | array( 118 | 'acp', 119 | 'ACP_MOD_REWRITE', 120 | array( 121 | 'module_basename' => '\phpbbseo\usu\acp\usu', 122 | 'module_langname' => 'ACP_SEO_EXTENDED', 123 | 'module_mode' => 'extended', 124 | 'module_auth' => 'ext_phpbbseo/usu && acl_a_board', 125 | ), 126 | ) 127 | ), 128 | ); 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /customise.php: -------------------------------------------------------------------------------- 1 | core = $core; 35 | $this->config = $config; 36 | } 37 | 38 | /** 39 | * inject() 40 | */ 41 | public function inject() 42 | { 43 | // ===> Custom url replacements <=== 44 | // Here you can set up custom replacements to be used in title injection. 45 | // Example : array('find' => 'replace') 46 | // $this->core->url_replace = array( 47 | // // Purely cosmetic replace 48 | // '$' => 'dollar', '€' => 'euro', 49 | // '\'s' => 's', // it's => its / mary's => marys ... 50 | // // Language specific replace (German example) 51 | // 'ß' => 'ss', 52 | // 'Ä' => 'Ae', 'ä' => 'ae', 53 | // 'Ö' => 'Oe', 'ö' => 'oe', 54 | // 'Ü' => 'Ue', 'ü' => 'ue', 55 | // ); 56 | 57 | // ===> Custom values Delimiters, Static parts and Suffixes <=== 58 | // ==> Delimiters <== 59 | // Can be overridden, requires .htaccess update <= 60 | // Example : 61 | // $this->seo_delim['forum'] = '-mydelim'; // instead of the default "-f" 62 | 63 | // ==> Static parts <== 64 | // Can be overridden, requires .htaccess update. 65 | // Example : 66 | // $this->seo_static['post'] = 'message'; // instead of the default "post" 67 | // !! phpBB files must be treated a bit differently !! 68 | // Example : 69 | // $this->seo_static['file'][ATTACHMENT_CATEGORY_QUICKTIME] = 'quicktime'; // instead of the default "qt" 70 | // $this->seo_static['file_index'] = 'my_files_virtual_dir'; // instead of the default "resources" 71 | 72 | // ==> Suffixes <== 73 | // Can be overridden, requires .htaccess update <= 74 | // Example : 75 | // $this->seo_ext['topic'] = '/'; // instead of the default ".html" 76 | 77 | // ==> Forum redirect <== 78 | // In case you are using forum id removing and need to edit some forum urls 79 | // that where already indexed, you can keep track of them ritgh here 80 | // 81 | // Example : 82 | // 83 | // $this->forum_redirect = array( 84 | // // 'old-url-without-id-nor-suffix' => forum_id, 85 | // 'old-forum-url' => 23, 86 | // 'another-one' => 32, 87 | // 'another-version-of-the-same' => 32, 88 | // ); 89 | // 90 | 91 | // ==> Special for lazy French, others may delete this part 92 | if (strpos($this->config['default_lang'], 'fr') !== false) 93 | { 94 | $this->core->seo_static['user'] = 'membre'; 95 | $this->core->seo_static['group'] = 'groupe'; 96 | $this->core->seo_static['global_announce'] = 'annonces'; 97 | $this->core->seo_static['leaders'] = 'equipe'; 98 | $this->core->seo_static['atopic'] = 'sujets-actifs'; 99 | $this->core->seo_static['utopic'] = 'sans-reponses'; 100 | $this->core->seo_static['npost'] = 'nouveaux-messages'; 101 | $this->core->seo_static['urpost'] = 'non-lu'; 102 | $this->core->seo_static['file_index'] = 'ressources'; 103 | } 104 | // <== Special for lazy French, others may delete this part 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /styles/all/template/phpbb_seo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * @package Ultimate SEO URL phpBB SEO 4 | * @version $$ 5 | * @copyright (c) 2006 - 2014 www.phpbb-seo.com 6 | * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 7 | * 8 | */ 9 | phpbb_seo = phpbb_seo || {}; 10 | /** 11 | * Jump to page 12 | */ 13 | function pageJump(item) { 14 | var page = item.val(); 15 | 16 | if (page !== null && !isNaN(page) && page == Math.floor(page) && page > 0) { 17 | var per_page = item.attr('data-per-page'), 18 | base_url = item.attr('data-base-url'), 19 | start_name = item.attr('data-start-name'), 20 | anchor = '', 21 | anchor_parts = base_url.split('#'); 22 | 23 | if ( anchor_parts[1] ) { 24 | base_url = anchor_parts[0]; 25 | anchor = '#' + anchor_parts[1]; 26 | } 27 | 28 | phpbb_seo.page = (page - 1) * per_page; 29 | 30 | if ( phpbb_seo.page > 0 ) { 31 | var phpEXtest = false; 32 | 33 | if ( start_name !== 'start' || base_url.indexOf('?') >= 0 || ( phpEXtest = base_url.match("/\." + phpbb_seo.phpEX + "$/i"))) { 34 | document.location.href = base_url.replace(/&/g, '&') + (phpEXtest ? '?' : '&') + start_name + '=' + phpbb_seo.page + anchor; 35 | } else { 36 | var ext = base_url.match(/\.[a-z0-9]+$/i); 37 | 38 | if (ext) { 39 | // location.ext => location-xx.ext 40 | document.location.href = base_url.replace(/\.[a-z0-9]+$/i, '') + phpbb_seo.delim_start + phpbb_seo.page + ext + anchor; 41 | } else { 42 | // location and location/ to location/pagexx.html 43 | var slash = base_url.match(/\/$/) ? '' : '/'; 44 | document.location.href = base_url + slash + phpbb_seo.static_pagination + phpbb_seo.page + phpbb_seo.ext_pagination + anchor; 45 | } 46 | } 47 | } else { 48 | document.location.href = base_url + anchor; 49 | } 50 | } 51 | } 52 | /** 53 | * phpbb_seo.external_hrefs() 54 | * Fixes href="#something" links with virtual directories 55 | * Optionally open external or marked with a css class links in a new window 56 | */ 57 | phpbb_seo.external_hrefs = function () { 58 | var current_domain = document.domain.toLowerCase(); 59 | 60 | if (!current_domain || !document.getElementsByTagName) { 61 | return; 62 | } 63 | 64 | if (phpbb_seo.external_sub && current_domain.indexOf('.') >= 0) { 65 | current_domain = current_domain.replace(new RegExp(/^[a-z0-9_-]+\.([a-z0-9_-]+\.([a-z]{2,6}|[a-z]{2,3}\.[a-z]{2,3}))$/i), '$1'); 66 | } 67 | 68 | if (phpbb_seo.ext_classes) { 69 | var extclass = new RegExp("(^|\s)(" + phpbb_seo.ext_classes + ")(\s|$)"); 70 | } 71 | 72 | if (phpbb_seo.hashfix) { 73 | var basehref = document.getElementsByTagName('base')[0]; 74 | 75 | if (basehref) { 76 | basehref = basehref.href; 77 | var hashtest = new RegExp("^(" + basehref + "|)#[a-z0-9_-]+$"); 78 | var current_href = document.location.href.replace(/#[a-z0-9_-]+$/i, ""); 79 | } else { 80 | phpbb_seo.hashfix = false; 81 | } 82 | } 83 | 84 | var hrefels = document.getElementsByTagName("a"); 85 | var hrefelslen = hrefels.length; 86 | 87 | for (var i = 0; i < hrefelslen; i++) { 88 | var el = hrefels[i]; 89 | var hrefinner = el.innerHTML.toLowerCase(); 90 | 91 | if (el.onclick || (el.href == '') || (el.href.indexOf('javascript') >=0 ) || (el.href.indexOf('mailto') >=0 ) || (hrefinner.indexOf('= 0) ) { 92 | continue; 93 | } 94 | 95 | if (phpbb_seo.hashfix && el.hash && hashtest.test(el.href)) { 96 | el.href = current_href + el.hash; 97 | } 98 | 99 | if (phpbb_seo.external) { 100 | 101 | if ((el.href.indexOf(current_domain) >= 0) && !(phpbb_seo.ext_classes && extclass.test(el.className))) { 102 | continue; 103 | } 104 | $(el).on('click', function () { window.open(this.href); return false; }); 105 | } 106 | } 107 | }; 108 | 109 | if (phpbb_seo.external || phpbb_seo.hashfix) { 110 | $(document).ready(phpbb_seo.external_hrefs); 111 | } 112 | -------------------------------------------------------------------------------- /language/en/acp_usu_install.php: -------------------------------------------------------------------------------- 1 | 'Related topics', 40 | 'SEO_RELATED' => 'Related topics activation', 41 | 'SEO_RELATED_EXPLAIN' => 'Display or not a related topic list in topic pages.
Note :
With mySQL >=4.1 and the topic table using MyISAM, related topics will be obtained using a FullText index on the topic title and will be sorted by relevancy. in other cases, an SQL LIKE will be used, and results will be sorted by publication time', 42 | 'SEO_RELATED_CHECK_IGNORE' => 'Ignore words filter', 43 | 'SEO_RELATED_CHECK_IGNORE_EXPLAIN' => 'Apply, or not, the search_ignore_words.php exclusions while searching for related topics', 44 | 'SEO_RELATED_LIMIT' => 'Related topics limit', 45 | 'SEO_RELATED_LIMIT_EXPLAIN' => 'Maximum amount of related topics to display', 46 | 'SEO_RELATED_ALLFORUMS' => 'Search in all forums', 47 | 'SEO_RELATED_ALLFORUMS_EXPLAIN' => 'Search in all forums instead of searching in the current one.
Note :
Searching in all forums is a bit slower and does not necessarily bring better results', 48 | // Install 49 | 'INSTALLED' => 'phpBB SEO Related Topics mod installed', 50 | 'ALREADY_INSTALLED' => 'phpBB SEO Related Topics mod is already installed', 51 | 'FULLTEXT_INSTALLED' => 'MySQL FullText Index installed', 52 | 'FULLTEXT_NOT_INSTALLED' => 'MySQL FullText Index is not available on this server, SQL LIKE will be used instead', 53 | 'INSTALLATION' => 'phpBB SEO Related Topics mod installation', 54 | 'INSTALLATION_START' => '⇒ Proceed with installing the mod

Retry to set the FullText Index (MySQL >= 4.1 using Myisam for topic table only)

Proceed with un-installing the mod', 55 | // un-install 56 | 'UNINSTALLED' => 'phpBB SEO Related Topics mod un-installed', 57 | 'ALREADY_UNINSTALLED' => 'phpBB SEO Related Topics mod is already un-installed', 58 | 'UNINSTALLATION' => 'phpBB SEO Related Topics mod un-installation', 59 | // SQL message 60 | 'SQL_REQUIRED' => 'The configured db user does not have enough privileges to alter tables, you need to run this query manually in order to add or drop the MySQL FullText index :
%1$s', 61 | // Security 62 | 'SEO_LOGIN' => 'The board requires you to be registered and logged in to view this page.', 63 | 'SEO_LOGIN_ADMIN' => 'The board requires you to be logged in as admin to view this page.
Your session has been destroyed for security purposes.', 64 | 'SEO_LOGIN_FOUNDER' => 'The board requires you to be logged in as the founder to view this page.', 65 | 'SEO_LOGIN_SESSION' => 'Session Check failed.
The Settings were not altered.
Your session has been destroyed for security purposes.', 66 | )); 67 | -------------------------------------------------------------------------------- /language/fr/acp_usu_install.php: -------------------------------------------------------------------------------- 1 | 'Related topics', 40 | 'SEO_RELATED' => 'Activer les articles en relation', 41 | 'SEO_RELATED_EXPLAIN' => 'Afficher ou non une liste de sujets en relation sur les pages de sujets.
Note :
Avec MYSQL >=4.1 et si la table des sujets utilise MyISAM, la relation sera établile via un index FullText sur le titre des sujets et les résultats seront classé par pertinence. Dans les autres cas, une requête LIKE sera utilisée et les résultats seront classés par ordre de publication', 42 | 'SEO_RELATED_CHECK_IGNORE' => 'Filtre mots ignorés', 43 | 'SEO_RELATED_CHECK_IGNORE_EXPLAIN' => 'Exclure, ou non, les mots du fichier search_ignore_words.php lors de la recherche des articles en relation', 44 | 'SEO_RELATED_LIMIT' => 'Nombre de résultats', 45 | 'SEO_RELATED_LIMIT_EXPLAIN' => 'Nombre de résultats à afficher au maximum', 46 | 'SEO_RELATED_ALLFORUMS' => 'Recherche sur tous les forums', 47 | 'SEO_RELATED_ALLFORUMS_EXPLAIN' => 'Rechercher sur tous les forums au lieux de rechercher uniquement dans le forum en cours.
Note :
Rechercher sur tous les forums est un peu plus lent et n’apporte pas forcément de meilleurs résultats', 48 | // Install 49 | 'INSTALLED' => 'Mod phpBB SEO Related Topics installé', 50 | 'ALREADY_INSTALLED' => 'Le mod phpBB SEO Related Topics est déjà installé', 51 | 'FULLTEXT_INSTALLED' => 'Index FullText Mysql installé', 52 | 'FULLTEXT_NOT_INSTALLED' => 'L’index FullText Mysql n’est pas disponible sur ce serveur, SQL LIKE sera utilisé', 53 | 'INSTALLATION' => 'Installation du mod phpBB SEO Related Topics', 54 | 'INSTALLATION_START' => '⇒ Installer le mod

Réessayer d’installer l’index Mysql FullText (Mysql >= 4.1 utilisant Myisam pour la table des topic uniquement)

Désinstaller le mod', 55 | // un-install 56 | 'UNINSTALLED' => 'Mod phpBB SEO Related Topics désinstallé', 57 | 'ALREADY_UNINSTALLED' => 'Le mod phpBB SEO Related Topics est déjà désinstallé', 58 | 'UNINSTALLATION' => 'Désinstallation du mod phpBB SEO Related Topics', 59 | // SQL message 60 | 'SQL_REQUIRED' => 'L’utilisateur SQL n’a pas assez de privilèges pour modifer des tables, vous devez lancer cette requpete manuellement pour ajouter ou retirer l’index FullText Mysql :
%1$s', 61 | // Security 62 | 'SEO_LOGIN' => 'Vous devez être enregistré pour pouvoir accéder à cette page.', 63 | 'SEO_LOGIN_ADMIN' => 'Vous devez être enregistré en tant qu’administrateur pour pouvoir accéder à cette page.
Votre session à été détruite pour des raisons de sécurité.', 64 | 'SEO_LOGIN_FOUNDER' => 'Vous devez être enregistré en tant que fondateur pour pouvoir accéder à cette page.', 65 | 'SEO_LOGIN_SESSION' => 'La vérification de session a échoué.
Aucune modification prise en compte.
Votre session à été détruite pour des raisons de sécurité.', 66 | )); 67 | -------------------------------------------------------------------------------- /language/it/acp_usu_install.php: -------------------------------------------------------------------------------- 1 | 'Argomenti correlati', 40 | 'SEO_RELATED' => 'Attivazione degli argomenti correlati', 41 | 'SEO_RELATED_EXPLAIN' => 'Visualizza o no la lista degli argomenti correlati nelle pagine degli argomenti.
Nota:
Con MySQL >=4.1 e la tabella relativa all’argomento utilizzando MyISAM, gli argomenti correlati sono ottenuti usando un Indice Full Text dove il titolo dell’argomento sarà ordinato per rilevanza. In altri casi, come SQL LIKE i risultati saranno ordinati per data di pubblicazione', 42 | 'SEO_RELATED_CHECK_IGNORE' => 'Ignora filtro parole', 43 | 'SEO_RELATED_CHECK_IGNORE_EXPLAIN' => 'Attiva le esclusioni tramite la funzione del file search_ignore_words.php nella ricerca degli argomenti correlati', 44 | 'SEO_RELATED_LIMIT' => 'Limite degli argomenti correlati', 45 | 'SEO_RELATED_LIMIT_EXPLAIN' => 'Numero massimo di argomenti correlati da visualizzare', 46 | 'SEO_RELATED_ALLFORUMS' => 'Cerca in tutti i forum', 47 | 'SEO_RELATED_ALLFORUMS_EXPLAIN' => 'Cerca in tutti i forum, invece di cercare in quello attuale.
Nota:
La ricerca in tutti i forum è un po’ più lenta e non produce necessariamente risultati migliori.', 48 | // Install 49 | 'INSTALLED' => 'phpBB SEO argomenti correlati installata', 50 | 'ALREADY_INSTALLED' => 'phpBB SEO argomenti correlati è già stata installata', 51 | 'FULLTEXT_INSTALLED' => 'L’Indice Full Text MySQL è installato', 52 | 'FULLTEXT_NOT_INSTALLED' => 'L’Indice Full Text MySQL non è disponibile su questo server, verrà utilizzato SQL LIKE.', 53 | 'INSTALLATION' => 'Installazione di phpBB SEO argomenti correlati', 54 | 'INSTALLATION_START' => '⇒ Procedi con l’installazione della MOD

Riprova per impostare l’Indice Full Text (MySQL >= 4.1 utilizzando solo le tabelle MyISam per gli argomenti)

Procedi con la disinstallazione della MOD.', 55 | // un-install 56 | 'UNINSTALLED' => 'phpBB SEO argomenti correlati disinstallata', 57 | 'ALREADY_UNINSTALLED' => 'phpBB SEO argomenti correlati è già stata disinstallata', 58 | 'UNINSTALLATION' => 'Disinstallazione phpBB SEO argomenti correlati', 59 | // SQL message 60 | 'SQL_REQUIRED' => 'L’utente del DB configurato non dispone di privilegi sufficienti per modificare le tabelle, è necessario eseguire questa query manualmente per aggiungere o eliminare l’Indice MySQL Full Text:
%1$s', 61 | // Security 62 | 'SEO_LOGIN' => 'Devi essere iscritto e connesso per visualizzare questa pagina.', 63 | 'SEO_LOGIN_ADMIN' => 'Devi essere iscritto e connesso come amministratore per visualizzare questa pagina.
La sessione è stata chiusa per motivi di sicurezza.', 64 | 'SEO_LOGIN_FOUNDER' => 'Devi essere iscritto e connesso come fondatore per visualizzare questa pagina.', 65 | 'SEO_LOGIN_SESSION' => 'Controllo sessione non riuscito.
Le impostazioni non sono state modificate.
La sessione è stata chiusa per motivi di sicurezza.', 66 | )); 67 | -------------------------------------------------------------------------------- /rewriter.php: -------------------------------------------------------------------------------- 1 | core = $core; 42 | $this->user = $user; 43 | $this->phpbb_root_path = $phpbb_root_path; 44 | } 45 | 46 | /** 47 | * URL rewritting for viewtopic.php 48 | * With Virtual Folder Injection 49 | */ 50 | public function viewtopic() 51 | { 52 | $this->core->filter_url($this->core->stop_vars); 53 | $this->core->path = $this->core->seo_path['phpbb_urlR']; 54 | 55 | if (!empty($this->core->get_vars['p'])) 56 | { 57 | $this->core->url = $this->core->seo_static['post'] . $this->core->get_vars['p'] . $this->core->seo_ext['post']; 58 | 59 | unset($this->core->get_vars['p'], $this->core->get_vars['f'], $this->core->get_vars['t'], $this->core->get_vars['start']); 60 | 61 | return; 62 | } 63 | 64 | if (isset($this->core->get_vars['t']) && !empty($this->core->seo_url['topic'][$this->core->get_vars['t']])) 65 | { 66 | $paginate_method_name = $this->core->paginate_method['topic']; 67 | 68 | // Filter default params 69 | $this->core->filter_get_var($this->core->get_filter['topic']); 70 | $this->core->$paginate_method_name($this->core->seo_ext['topic']); 71 | $this->core->url = $this->core->seo_url['topic'][$this->core->get_vars['t']] . $this->core->start; 72 | 73 | unset($this->core->get_vars['t'], $this->core->get_vars['f'], $this->core->get_vars['p']); 74 | 75 | return; 76 | } 77 | else if (!empty($this->core->get_vars['t'])) 78 | { 79 | $paginate_method_name = $this->core->paginate_method['topic']; 80 | 81 | // Filter default params 82 | $this->core->filter_get_var($this->core->get_filter['topic']); 83 | $this->core->$paginate_method_name($this->core->seo_ext['topic']); 84 | $this->core->url = $this->core->seo_static['topic'] . $this->core->get_vars['t'] . $this->core->start; 85 | 86 | unset($this->core->get_vars['t'], $this->core->get_vars['f'], $this->core->get_vars['p']); 87 | 88 | return; 89 | } 90 | 91 | $this->core->path = $this->core->seo_path['phpbb_url']; 92 | 93 | return; 94 | } 95 | 96 | /** 97 | * URL rewritting for viewforum.php 98 | */ 99 | public function viewforum() 100 | { 101 | $this->core->path = $this->core->seo_path['phpbb_urlR']; 102 | $this->core->filter_url($this->core->stop_vars); 103 | 104 | if (!empty($this->core->get_vars['f'])) 105 | { 106 | $paginate_method_name = $this->core->paginate_method['forum']; 107 | 108 | // Filter default params 109 | $this->core->filter_get_var($this->core->get_filter['forum']); 110 | $this->core->$paginate_method_name($this->core->seo_ext['forum']); 111 | 112 | if (empty($this->core->seo_url['forum'][$this->core->get_vars['f']])) 113 | { 114 | $this->core->url = $this->core->seo_static['forum'] . $this->core->get_vars['f'] . $this->core->start; 115 | } 116 | else 117 | { 118 | $this->core->url = $this->core->seo_url['forum'][$this->core->get_vars['f']] . $this->core->start; 119 | } 120 | 121 | unset($this->core->get_vars['f']); 122 | 123 | return; 124 | } 125 | 126 | $this->core->path = $this->core->seo_path['phpbb_url']; 127 | 128 | return; 129 | } 130 | 131 | /** 132 | * URL rewritting for memberlist.php 133 | * with nicknames and group name injection 134 | */ 135 | public function memberlist() 136 | { 137 | $this->core->path = $this->core->seo_path['phpbb_urlR']; 138 | 139 | if (@$this->core->get_vars['mode'] === 'viewprofile' && !@empty($this->core->seo_url['user'][$this->core->get_vars['u']])) 140 | { 141 | $this->core->url = $this->core->seo_url['user'][$this->core->get_vars['u']] . $this->core->seo_ext['user']; 142 | 143 | unset($this->core->get_vars['mode'], $this->core->get_vars['u']); 144 | 145 | return; 146 | } 147 | else if (@$this->core->get_vars['mode'] === 'group' && !@empty($this->core->seo_url['group'][$this->core->get_vars['g']])) 148 | { 149 | $paginate_method_name = $this->core->paginate_method['group']; 150 | 151 | $this->core->$paginate_method_name($this->core->seo_ext['group']); 152 | $this->core->url = $this->core->seo_url['group'][$this->core->get_vars['g']] . $this->core->start; 153 | 154 | unset($this->core->get_vars['mode'], $this->core->get_vars['g']); 155 | 156 | return; 157 | } 158 | else if (@$this->core->get_vars['mode'] === 'team') 159 | { 160 | $this->core->url = $this->core->seo_static['leaders'] . $this->core->seo_ext['leaders']; 161 | 162 | unset($this->core->get_vars['mode']); 163 | 164 | return; 165 | } 166 | 167 | $this->core->path = $this->core->seo_path['phpbb_url']; 168 | 169 | return; 170 | } 171 | 172 | /** 173 | * URL rewritting for search.php 174 | */ 175 | public function search() 176 | { 177 | if (isset($this->core->get_vars['fid'])) 178 | { 179 | $this->core->get_vars = array(); 180 | $this->core->url = $this->core->url_in; 181 | 182 | return; 183 | } 184 | 185 | $this->core->path = $this->core->seo_path['phpbb_urlR']; 186 | 187 | $user_id = !empty($this->core->get_vars['author_id']) ? $this->core->get_vars['author_id'] : (isset($this->core->seo_url['username'][rawurldecode(@$this->core->get_vars['author'])]) ? $this->core->seo_url['username'][rawurldecode(@$this->core->get_vars['author'])] : 0); 188 | 189 | if ($user_id && isset($this->core->seo_url['user'][$user_id])) 190 | { 191 | $sr = (@$this->core->get_vars['sr'] == 'topics' ) ? 'topics' : 'posts'; 192 | 193 | $paginate_method_name = $this->core->paginate_method['user']; 194 | 195 | // Filter default params 196 | $this->core->filter_get_var($this->core->get_filter['search']); 197 | $this->core->$paginate_method_name($this->core->seo_ext['user']); 198 | $this->core->url = $this->core->seo_url['user'][$user_id] . $this->core->seo_delim['sr'] . $sr . $this->core->start; 199 | 200 | unset($this->core->get_vars['author_id'], $this->core->get_vars['author'], $this->core->get_vars['sr']); 201 | 202 | return; 203 | } 204 | else if ($this->core->seo_opt['profile_noids'] && !empty($this->core->get_vars['author'])) 205 | { 206 | $sr = (@$this->core->get_vars['sr'] == 'topics') ? '/topics' : '/posts'; 207 | 208 | // Filter default params 209 | $this->core->filter_get_var($this->core->get_filter['search']); 210 | $this->core->rewrite_pagination_page(); 211 | $this->core->url = $this->core->seo_static['user'] . '/' . $this->core->seo_url_encode($this->core->get_vars['author']) . $sr . $this->core->start; 212 | 213 | unset($this->core->get_vars['author'], $this->core->get_vars['author_id'], $this->core->get_vars['sr']); 214 | 215 | return; 216 | } 217 | else if (!empty($this->core->get_vars['search_id'])) 218 | { 219 | switch ($this->core->get_vars['search_id']) 220 | { 221 | case 'active_topics': 222 | $paginate_method_name = $this->core->paginate_method['atopic']; 223 | 224 | $this->core->filter_get_var($this->core->get_filter['search']); 225 | $this->core->$paginate_method_name($this->core->seo_ext['atopic']); 226 | $this->core->url = $this->core->seo_static['atopic'] . $this->core->start; 227 | 228 | unset($this->core->get_vars['search_id'], $this->core->get_vars['sr']); 229 | 230 | if (@$this->core->get_vars['st'] == 7) 231 | { 232 | unset($this->core->get_vars['st']); 233 | } 234 | 235 | return; 236 | case 'unanswered': 237 | $paginate_method_name = $this->core->paginate_method['utopic']; 238 | 239 | $this->core->filter_get_var($this->core->get_filter['search']); 240 | $this->core->$paginate_method_name($this->core->seo_ext['utopic']); 241 | $this->core->url = $this->core->seo_static['utopic'] . $this->core->start; 242 | 243 | unset($this->core->get_vars['search_id']); 244 | 245 | if (@$this->core->get_vars['sr'] == 'topics') 246 | { 247 | unset($this->core->get_vars['sr']); 248 | } 249 | 250 | return; 251 | case 'egosearch': 252 | $this->core->set_user_url($this->user->data['username'], $this->user->data['user_id']); 253 | $this->core->url = $this->core->seo_url['user'][$this->user->data['user_id']] . $this->core->seo_delim['sr'] . 'topics' . $this->core->seo_ext['user']; 254 | 255 | unset($this->core->get_vars['search_id']); 256 | 257 | return; 258 | case 'newposts': 259 | $paginate_method_name = $this->core->paginate_method['npost']; 260 | 261 | $this->core->filter_get_var($this->core->get_filter['search']); 262 | $this->core->$paginate_method_name($this->core->seo_ext['npost']); 263 | $this->core->url = $this->core->seo_static['npost'] . $this->core->start; 264 | 265 | unset($this->core->get_vars['search_id']); 266 | 267 | if (@$this->core->get_vars['sr'] == 'topics') 268 | { 269 | unset($this->core->get_vars['sr']); 270 | } 271 | 272 | return; 273 | case 'unreadposts': 274 | $paginate_method_name = $this->core->paginate_method['urpost']; 275 | 276 | $this->core->filter_get_var($this->core->get_filter['search']); 277 | $this->core->$paginate_method_name($this->core->seo_ext['urpost']); 278 | $this->core->url = $this->core->seo_static['urpost'] . $this->core->start; 279 | 280 | unset($this->core->get_vars['search_id']); 281 | 282 | if (@$this->core->get_vars['sr'] == 'topics') 283 | { 284 | unset($this->core->get_vars['sr']); 285 | } 286 | 287 | return; 288 | } 289 | } 290 | 291 | $this->core->path = $this->core->seo_path['phpbb_url']; 292 | 293 | return; 294 | } 295 | 296 | /** 297 | * URL rewritting for download/file.php 298 | */ 299 | public function phpbb_files() 300 | { 301 | $this->core->filter_url($this->core->stop_vars); 302 | $this->core->path = $this->core->seo_path['phpbb_filesR']; 303 | 304 | if (isset($this->core->get_vars['id']) && !empty($this->core->seo_url['file'][$this->core->get_vars['id']])) 305 | { 306 | $this->core->url = $this->core->seo_url['file'][$this->core->get_vars['id']]; 307 | 308 | if (!empty($this->core->get_vars['t'])) 309 | { 310 | $this->core->url .= $this->core->seo_delim['file'] . $this->core->seo_static['thumb']; 311 | } 312 | /* 313 | else if (@$this->core->get_vars['mode'] == 'view') 314 | { 315 | $this->core->url .= $this->core->seo_delim['file'] . 'view'; 316 | } 317 | */ 318 | 319 | $this->core->url .= $this->core->seo_delim['file'] . $this->core->get_vars['id']; 320 | 321 | unset($this->core->get_vars['id'], $this->core->get_vars['t'], $this->core->get_vars['mode']); 322 | 323 | return; 324 | } 325 | 326 | $this->core->path = $this->core->seo_path['phpbb_files']; 327 | 328 | return; 329 | } 330 | 331 | /** 332 | * URL rewritting for index.php 333 | */ 334 | public function index() 335 | { 336 | $this->core->path = $this->core->seo_path['phpbb_urlR']; 337 | 338 | if ($this->core->filter_url($this->core->stop_vars)) 339 | { 340 | $this->core->url = $this->core->seo_static['index'] . $this->core->seo_ext['index']; 341 | 342 | return; 343 | } 344 | 345 | $this->core->path = $this->core->seo_path['phpbb_url']; 346 | 347 | return; 348 | } 349 | } 350 | -------------------------------------------------------------------------------- /event/listener.php: -------------------------------------------------------------------------------- 1 | core = $core; 83 | $this->template = $template; 84 | $this->user = $user; 85 | $this->config = $config; 86 | $this->auth = $auth; 87 | $this->request = $request; 88 | $this->db = $db; 89 | $this->phpbb_root_path = $phpbb_root_path; 90 | $this->php_ext = $php_ext; 91 | } 92 | 93 | public static function getSubscribedEvents() 94 | { 95 | return array( 96 | 'core.common' => 'core_common', 97 | 'core.user_setup' => 'core_user_setup', 98 | 'core.append_sid' => 'core_append_sid', 99 | 'core.pagination_generate_page_link' => 'core_pagination_generate_page_link', 100 | 'core.page_header_after' => 'core_page_header_after', 101 | 'core.page_footer' => 'core_page_footer', 102 | 'core.viewforum_modify_topicrow' => 'core_viewforum_modify_topicrow', 103 | 'core.viewtopic_modify_page_title' => 'core_viewtopic_modify_page_title', 104 | 'core.viewtopic_modify_post_row' => 'core_viewtopic_modify_post_row', 105 | 'core.memberlist_view_profile' => 'core_memberlist_view_profile', 106 | 'core.modify_username_string' => 'core_modify_username_string', 107 | 'core.submit_post_end' => 'core_submit_post_end', 108 | 'core.posting_modify_template_vars' => 'core_posting_modify_template_vars', 109 | 'core.display_user_activity_modify_actives' => 'core_display_user_activity_modify_actives', 110 | ); 111 | } 112 | 113 | public function core_user_setup($event) 114 | { 115 | if (empty($this->core->seo_opt['url_rewrite'])) 116 | { 117 | return; 118 | } 119 | 120 | $user_data = $event['user_data']; 121 | 122 | switch($this->core->seo_opt['req_file']) 123 | { 124 | case 'viewforum': 125 | global $forum_data; // god save the hax 126 | 127 | if ($forum_data) 128 | { 129 | if ($forum_data['forum_topics_per_page']) 130 | { 131 | $this->config['topics_per_page'] = $forum_data['forum_topics_per_page']; 132 | } 133 | 134 | $start = $this->core->seo_chk_start($this->start, $this->config['topics_per_page']); 135 | 136 | if ($this->start != $start) 137 | { 138 | $this->start = (int) $start; 139 | $this->request->overwrite('start', $this->start); 140 | } 141 | 142 | $this->forum_id = max(0, (int) $forum_data['forum_id']); 143 | $this->core->prepare_forum_url($forum_data); 144 | $this->core->seo_path['canonical'] = $this->core->drop_sid(append_sid("{$this->phpbb_root_path}viewforum.{$this->php_ext}", "f={$this->forum_id}&start={$this->start}")); 145 | 146 | $this->core->set_parent_urls($forum_data); 147 | 148 | $default_sort_days = (!empty($user_data['user_topic_show_days'])) ? $user_data['user_topic_show_days'] : 0; 149 | $default_sort_key = (!empty($user_data['user_topic_sortby_type'])) ? $user_data['user_topic_sortby_type'] : 't'; 150 | $default_sort_dir = (!empty($user_data['user_topic_sortby_dir'])) ? $user_data['user_topic_sortby_dir'] : 'd'; 151 | 152 | $mark_read = $this->request->variable('mark', ''); 153 | $sort_days = $this->request->variable('st', $default_sort_days); 154 | $sort_key = $this->request->variable('sk', $default_sort_key); 155 | $sort_dir = $this->request->variable('sd', $default_sort_dir); 156 | $keep_mark = in_array($mark_read, array('topics', 'topic', 'forums', 'all')) ? (boolean) ($user_data['is_registered'] || $config['load_anon_lastread']) : false; 157 | 158 | $this->core->seo_opt['zero_dupe']['redir_def'] = array( 159 | 'hash' => array('val' => $this->request->variable('hash', ''), 'keep' => $keep_mark), 160 | 'f' => array('val' => $this->forum_id, 'keep' => true, 'force' => true), 161 | 'st' => array('val' => $sort_days, 'keep' => true), 162 | 'sk' => array('val' => $sort_key, 'keep' => true), 163 | 'sd' => array('val' => $sort_dir, 'keep' => true), 164 | 'mark' => array('val' => $mark_read, 'keep' => $keep_mark), 165 | 'mark_time' => array('val' => $this->request->variable('mark_time', 0), 'keep' => $keep_mark), 166 | 'start' => array('val' => $this->start, 'keep' => true), 167 | ); 168 | 169 | $this->core->zero_dupe(); 170 | } 171 | else 172 | { 173 | if ($this->core->seo_opt['redirect_404_forum']) 174 | { 175 | $this->core->seo_redirect($this->core->seo_path['phpbb_url']); 176 | } 177 | else 178 | { 179 | send_status_line(404, 'Not Found'); 180 | } 181 | } 182 | 183 | break; 184 | 185 | case 'viewtopic': 186 | global $topic_data, $topic_replies, $forum_id, $post_id, $view; // god save the hax 187 | 188 | if (empty($topic_data)) 189 | { 190 | if ($this->core->seo_opt['redirect_404_topic']) 191 | { 192 | $this->core->seo_redirect($this->core->seo_path['phpbb_url']); 193 | } 194 | else 195 | { 196 | send_status_line(404, 'Not Found'); 197 | } 198 | return; 199 | } 200 | 201 | $this->topic_id = $topic_id = (int) $topic_data['topic_id']; 202 | $this->forum_id = $forum_id; 203 | 204 | $this->core->set_parent_urls($topic_data); 205 | 206 | if (!empty($topic_data['topic_url']) || (isset($topic_data['topic_url']) && !empty($this->core->seo_opt['sql_rewrite']))) 207 | { 208 | if ($topic_data['topic_type'] == POST_GLOBAL) 209 | { 210 | // Let's make sure user will see global annoucements 211 | // $this->auth->cache[$forum_id]['f_read'] = 1; 212 | 213 | $_parent = $this->core->seo_static['global_announce']; 214 | } 215 | else 216 | { 217 | $this->core->prepare_forum_url($topic_data); 218 | $_parent = $this->core->seo_url['forum'][$forum_id]; 219 | } 220 | 221 | if (!$this->core->check_url('topic', $topic_data['topic_url'], $_parent)) 222 | { 223 | if (!empty($topic_data['topic_url'])) 224 | { 225 | // Here we get rid of the seo delim (-t) and put it back even in simple mod 226 | // to be able to handle all cases at once 227 | $_url = preg_replace('`' . $this->core->seo_delim['topic'] . '$`i', '', $topic_data['topic_url']); 228 | $_title = $this->core->get_url_info('topic', $_url . $this->core->seo_delim['topic'] . $topic_id, 'title'); 229 | } 230 | else 231 | { 232 | $_title = $this->core->modrtype > 2 ? censor_text($topic_data['topic_title']) : ''; 233 | } 234 | 235 | unset($this->core->seo_url['topic'][$topic_id]); 236 | 237 | $topic_data['topic_url'] = $this->core->get_url_info('topic', $this->core->prepare_url('topic', $_title, $topic_id, $_parent, ((empty($_title) || ($_title == $this->core->seo_static['topic'])) ? true : false)), 'url'); 238 | 239 | unset($this->core->seo_url['topic'][$topic_id]); 240 | 241 | if ($topic_data['topic_url']) 242 | { 243 | // Update the topic_url field for later re-use 244 | $sql = "UPDATE " . TOPICS_TABLE . " SET topic_url = '" . $this->db->sql_escape($topic_data['topic_url']) . "' 245 | WHERE topic_id = $topic_id"; 246 | $this->db->sql_query($sql); 247 | } 248 | } 249 | } 250 | else 251 | { 252 | $topic_data['topic_url'] = ''; 253 | } 254 | 255 | $this->core->prepare_topic_url($topic_data, $this->forum_id); 256 | 257 | if (!$this->request->is_set('start')) 258 | { 259 | if (!empty($post_id)) 260 | { 261 | $this->start = floor(($topic_data['prev_posts']) / $this->config['posts_per_page']) * $this->config['posts_per_page']; 262 | } 263 | } 264 | 265 | $start = $this->core->seo_chk_start($this->start, $this->config['posts_per_page']); 266 | 267 | if ($this->start != $start) 268 | { 269 | $this->start = (int) $start; 270 | if (empty($post_id)) 271 | { 272 | $this->request->overwrite('start', $this->start); 273 | } 274 | } 275 | 276 | $this->core->seo_path['canonical'] = $this->core->drop_sid(append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", "f={$this->forum_id}&t={$topic_id}&start={$this->start}")); 277 | 278 | if ($this->core->seo_opt['zero_dupe']['on']) 279 | { 280 | $highlight_match = $highlight = ''; 281 | 282 | if ($this->hilit_words) 283 | { 284 | $highlight_match = phpbb_clean_search_string($this->hilit_words); 285 | $highlight = urlencode($highlight_match); 286 | $highlight_match = str_replace('\*', '\w+?', preg_quote($highlight_match, '#')); 287 | $highlight_match = preg_replace('#(?<=^|\s)\\\\w\*\?(?=\s|$)#', '\w+?', $highlight_match); 288 | $highlight_match = str_replace(' ', '|', $highlight_match); 289 | } 290 | 291 | if ($post_id && !$view && !$this->core->set_do_redir_post()) 292 | { 293 | $this->core->seo_opt['zero_dupe']['redir_def'] = array( 294 | 'p' => array('val' => $post_id, 'keep' => true, 'force' => true, 'hash' => "p$post_id"), 295 | 'hilit' => array('val' => (($highlight_match) ? $highlight : ''), 'keep' => !empty($highlight_match)), 296 | ); 297 | } 298 | else 299 | { 300 | $default_sort_days = (!empty($user_data['user_topic_show_days'])) ? $user_data['user_topic_show_days'] : 0; 301 | $default_sort_key = (!empty($user_data['user_topic_sortby_type'])) ? $user_data['user_topic_sortby_type'] : 't'; 302 | $default_sort_dir = (!empty($user_data['user_topic_sortby_dir'])) ? $user_data['user_topic_sortby_dir'] : 'd'; 303 | 304 | $sort_days = $this->request->variable('st', $default_sort_days); 305 | $sort_key = $this->request->variable('sk', $default_sort_key); 306 | $sort_dir = $this->request->variable('sd', $default_sort_dir); 307 | $seo_watch = $this->request->variable('watch', ''); 308 | $seo_unwatch = $this->request->variable('unwatch', ''); 309 | $seo_bookmark = $this->request->variable('bookmark', 0); 310 | $keep_watch = (boolean) ($seo_watch == 'topic' && $user_data['is_registered']); 311 | $keep_unwatch = (boolean) ($seo_unwatch == 'topic' && $user_data['is_registered']); 312 | $keep_hash = (boolean) ($keep_watch || $keep_unwatch || $seo_bookmark); 313 | $seo_uid = max(0, $this->request->variable('uid', 0)); 314 | 315 | $this->core->seo_opt['zero_dupe']['redir_def'] = array( 316 | 'uid' => array('val' => $seo_uid, 'keep' => (boolean) ($keep_hash && $seo_uid)), 317 | 'f' => array('val' => $forum_id, 'keep' => true, 'force' => true), 318 | 't' => array('val' => $topic_id, 'keep' => true, 'force' => true, 'hash' => $post_id ? "p{$post_id}" : ''), 319 | 'p' => array('val' => $post_id, 'keep' => ($post_id && $view == 'show' ? true : false), 'hash' => "p{$post_id}"), 320 | 'watch' => array('val' => $seo_watch, 'keep' => $keep_watch), 321 | 'unwatch' => array('val' => $seo_unwatch, 'keep' => $keep_unwatch), 322 | 'bookmark' => array('val' => $seo_bookmark, 'keep' => (boolean) ($user_data['is_registered'] && $this->config['allow_bookmarks'] && $seo_bookmark)), 323 | 'start' => array('val' => $this->start, 'keep' => true, 'force' => true), 324 | 'hash' => array('val' => $this->request->variable('hash', ''), 'keep' => $keep_hash), 325 | 'st' => array('val' => $sort_days, 'keep' => true), 326 | 'sk' => array('val' => $sort_key, 'keep' => true), 327 | 'sd' => array('val' => $sort_dir, 'keep' => true), 328 | 'view' => array('val' => $view, 'keep' => $view == 'print' ? (boolean) $this->auth->acl_get('f_print', $forum_id) : (($view == 'viewpoll' || $view == 'show') ? true : false)), 329 | 'hilit' => array('val' => (($highlight_match) ? $highlight : ''), 'keep' => (boolean) !(!$user_data['is_registered'] && $this->core->seo_opt['rem_hilit'])), 330 | ); 331 | 332 | if ($this->core->seo_opt['zero_dupe']['redir_def']['bookmark']['keep']) 333 | { 334 | // Prevent unessecary redirections 335 | // Note : bookmark, watch and unwatch cases could just not be handled by the zero dupe (no redirect at all when used), 336 | // but the handling as well acts as a security shield so, it's worth it ;) 337 | unset($this->core->seo_opt['zero_dupe']['redir_def']['start']); 338 | } 339 | } 340 | 341 | $this->core->zero_dupe(); 342 | } 343 | 344 | break; 345 | 346 | case 'memberlist': 347 | if ($this->request->is_set('un')) 348 | { 349 | $un = rawurldecode($this->request->variable('un', '', true)); 350 | 351 | if (!$this->core->is_utf8($un)) 352 | { 353 | $un = utf8_normalize_nfc(utf8_recode($un, 'ISO-8859-1')); 354 | } 355 | 356 | $this->request->overwrite('un', $un); 357 | } 358 | 359 | break; 360 | } 361 | } 362 | 363 | public function core_common($event) 364 | { 365 | if (empty($this->core->seo_opt['url_rewrite'])) 366 | { 367 | return; 368 | } 369 | 370 | // this helps fixing several cases of relative links 371 | define('PHPBB_USE_BOARD_URL_PATH', true); 372 | 373 | $this->start = max(0, $this->request->variable('start', 0)); 374 | 375 | switch($this->core->seo_opt['req_file']) 376 | { 377 | case 'viewforum': 378 | $this->forum_id = max(0, $this->request->variable('f', 0)); 379 | 380 | if (!$this->forum_id) 381 | { 382 | $this->core->get_forum_id($this->forum_id); 383 | 384 | if (!$this->forum_id) 385 | { 386 | // here we need to find out if the uri really was a forum one 387 | if (!preg_match('`^.+?\.' . $this->php_ext . '(\?.*)?$`', $this->core->seo_path['uri'])) 388 | { 389 | // request url is rewriten 390 | // re-route request to app.php 391 | global $phpbb_container; // god save the hax 392 | $phpbb_root_path = $this->phpbb_root_path; 393 | $phpEx = $this->php_ext; 394 | include($phpbb_root_path . 'includes/functions_url_matcher.' . $phpEx); 395 | 396 | // we need to overwrite couple SERVER variable to simulate direct app.php call 397 | // start with scripts 398 | $script_fix_list = array('SCRIPT_FILENAME', 'SCRIPT_NAME', 'PHP_SELF'); 399 | foreach ($script_fix_list as $varname) 400 | { 401 | if ($this->request->is_set($varname, \phpbb\request\request_interface::SERVER)) 402 | { 403 | $value = $this->request->server($varname); 404 | if ($value) 405 | { 406 | $value = preg_replace('`^(.*?)viewforum\.' . $this->php_ext . '((\?|/).*)?$`', '\1app.' . $this->php_ext . '\2', $value); 407 | $this->request->overwrite($varname, $value, \phpbb\request\request_interface::SERVER); 408 | } 409 | } 410 | } 411 | 412 | // then fix query strings 413 | $qs_fix_list = array('QUERY_STRING', 'REDIRECT_QUERY_STRING'); 414 | foreach ($qs_fix_list as $varname) 415 | { 416 | if ($this->request->is_set($varname, \phpbb\request\request_interface::SERVER)) 417 | { 418 | $value = $this->request->server($varname); 419 | if ($value) 420 | { 421 | $value = preg_replace('`^forum_uri=[^&]*(&|&)start=((&|&).*)?$`i', '', $value); 422 | $this->request->overwrite($varname, $value, \phpbb\request\request_interface::SERVER); 423 | } 424 | } 425 | } 426 | 427 | // Start session management 428 | $this->user->session_begin(); 429 | $this->auth->acl($this->user->data); 430 | $this->user->setup('app'); 431 | 432 | $http_kernel = $phpbb_container->get('http_kernel'); 433 | $symfony_request = $phpbb_container->get('symfony_request'); 434 | $response = $http_kernel->handle($symfony_request); 435 | $response->send(); 436 | $http_kernel->terminate($symfony_request, $response); 437 | exit; 438 | 439 | } 440 | 441 | if ($this->core->seo_opt['redirect_404_forum']) 442 | { 443 | $this->core->seo_redirect($this->core->seo_path['phpbb_url']); 444 | } 445 | else 446 | { 447 | send_status_line(404, 'Not Found'); 448 | } 449 | } 450 | else 451 | { 452 | $this->request->overwrite('f', (int) $this->forum_id); 453 | } 454 | } 455 | 456 | break; 457 | 458 | case 'viewtopic': 459 | $this->forum_id = max(0, $this->request->variable('f', 0)); 460 | $this->topic_id = max(0, $this->request->variable('t', 0)); 461 | $this->post_id = max(0, $this->request->variable('p', 0)); 462 | 463 | if (!$this->forum_id) 464 | { 465 | $this->core->get_forum_id($this->forum_id); 466 | 467 | if ($this->forum_id > 0) 468 | { 469 | $this->request->overwrite('f', (int) $this->forum_id); 470 | } 471 | } 472 | 473 | $this->hilit_words = $this->request->variable('hilit', '', true); 474 | 475 | if ($this->hilit_words) 476 | { 477 | $this->hilit_words = rawurldecode($this->hilit_words); 478 | 479 | if (!$this->core->is_utf8($this->hilit_words)) 480 | { 481 | $this->hilit_words = utf8_normalize_nfc(utf8_recode($this->hilit_words, 'iso-8859-1')); 482 | } 483 | 484 | $this->request->overwrite('hilit', $this->hilit_words); 485 | } 486 | 487 | if (!$this->topic_id && !$this->post_id) 488 | { 489 | if ($this->core->seo_opt['redirect_404_forum']) 490 | { 491 | if ($this->forum_id && !empty($this->core->seo_url['forum'][$this->forum_id])) 492 | { 493 | $this->core->seo_redirect(append_sid("{$this->phpbb_root_path}viewforum.{$this->php_ext}", 'f=' . $this->forum_id)); 494 | } 495 | else 496 | { 497 | $this->core->seo_redirect($this->core->seo_path['phpbb_url']); 498 | } 499 | } 500 | else 501 | { 502 | send_status_line(404, 'Not Found'); 503 | } 504 | } 505 | 506 | break; 507 | } 508 | } 509 | 510 | public function core_page_header_after($event) 511 | { 512 | $this->template->assign_vars(array( 513 | 'SEO_PHPBB_URL' => $this->core->seo_path['phpbb_url'], 514 | 'SEO_ROOT_URL' => $this->core->seo_path['phpbb_url'], 515 | 'SEO_BASE_HREF' => $this->core->seo_opt['seo_base_href'], 516 | 'SEO_START_DELIM' => $this->core->seo_delim['start'], 517 | 'SEO_SATIC_PAGE' => $this->core->seo_static['pagination'], 518 | 'SEO_EXT_PAGE' => $this->core->seo_ext['pagination'], 519 | 'SEO_EXTERNAL' => !empty($this->config['seo_ext_links']) ? 1 : '', 520 | 'SEO_EXTERNAL_SUB' => !empty($this->config['seo_ext_subdomain']) ? 1 : '', 521 | 'SEO_EXT_CLASSES' => !empty($this->config['seo_ext_classes']) ? preg_replace('`[^a-z0-9_|-]+`', '', str_replace(',', '|', trim($this->config['seo_ext_classes'], ', '))) : '', 522 | 'SEO_HASHFIX' => $this->core->seo_opt['url_rewrite'] && $this->core->seo_opt['virtual_folder'] ? 1 : '', 523 | 'SEO_PHPEX' => $this->php_ext, 524 | )); 525 | 526 | $page_title = $event['page_title']; 527 | 528 | if (!empty($this->config['seo_append_sitename']) && !empty($this->config['sitename'])) 529 | { 530 | $event['page_title'] = $page_title && strpos($page_title, $this->config['sitename']) === false ? $page_title . ' - ' . $this->config['sitename'] : $page_title; 531 | } 532 | } 533 | 534 | /** 535 | * Note : This mod is going to help your site a lot in Search Engines 536 | * If You really cannot put this link, you should at least provide us with one visible 537 | * (can be small but visible) link on your home page or your forum Index using this code for example : 538 | * phpBB SEO 539 | */ 540 | public function core_page_footer($event) 541 | { 542 | if (empty($this->core->seo_opt['copyrights']['title'])) 543 | { 544 | $this->core->seo_opt['copyrights']['title'] = strpos($this->config['default_lang'], 'fr') !== false ? 'Optimisation du Référencement par phpBB SEO' : 'Search Engine Optimization By phpBB SEO'; 545 | } 546 | 547 | if (empty($this->core->seo_opt['copyrights']['txt'])) 548 | { 549 | $this->core->seo_opt['copyrights']['txt'] = 'phpBB SEO'; 550 | } 551 | 552 | if ($this->core->seo_opt['copyrights']['img']) 553 | { 554 | $output = '' . $this->core->seo_opt['copyrights']['txt'] . ''; 555 | } 556 | else 557 | { 558 | $output = '' . $this->core->seo_opt['copyrights']['txt'] . ''; 559 | } 560 | 561 | $this->user->lang['TRANSLATION_INFO'] = (!empty($this->user->lang['TRANSLATION_INFO']) ? $this->user->lang['TRANSLATION_INFO'] . '
' : '') . $output; 562 | 563 | $this->template->assign_vars(array( 564 | 'U_CANONICAL' => $this->core->get_canonical(), 565 | )); 566 | } 567 | 568 | public function core_viewforum_modify_topicrow($event) 569 | { 570 | // Unfortunately, we do not have direct access to $topic_forum_id here 571 | global $topic_forum_id, $topic_id, $view_topic_url; // god save the hax 572 | 573 | $row = $event['row']; 574 | $topic_row = $event['topic_row']; 575 | 576 | $this->core->prepare_topic_url($row, $topic_forum_id); 577 | 578 | $view_topic_url_params = 'f=' . $topic_forum_id . '&t=' . $topic_id; 579 | $view_topic_url = $topic_row['U_VIEW_TOPIC'] = $this->core->url_rewrite("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", $view_topic_url_params, true, false, false, true); 580 | 581 | $event['topic_row'] = $topic_row; 582 | $event['row'] = $row; 583 | } 584 | 585 | public function core_viewtopic_modify_post_row($event) 586 | { 587 | $post_row = $event['post_row']; 588 | $row = $event['row']; 589 | 590 | $post_row['U_APPROVE_ACTION'] = append_sid("{$this->phpbb_root_path}mcp.$this->php_ext", "i=queue&p={$row['post_id']}&f={$this->forum_id}&redirect=" . urlencode(str_replace('&', '&', append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", "f={$this->forum_id}&t={$this->topic_id}&p=" . $row['post_id']) . '#p' . $row['post_id']))); 591 | $post_row['L_POST_DISPLAY'] = ($row['hide_post']) ? $this->user->lang('POST_DISPLAY', 'phpbb_root_path}viewtopic.{$this->php_ext}", "f={$this->forum_id}&t={$this->topic_id}&p={$row['post_id']}&view=show#p{$row['post_id']}") . '">', '') : ''; 592 | $event['post_row'] = $post_row; 593 | } 594 | 595 | public function core_viewtopic_modify_page_title($event) 596 | { 597 | $this->template->assign_vars(array( 598 | 'U_PRINT_TOPIC' => ($this->auth->acl_get('f_print', $this->forum_id)) ? append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", "f={$this->forum_id}&t={$this->topic_id}&view=print") : '', 599 | 'U_BOOKMARK_TOPIC' => ($this->user->data['is_registered'] && $this->config['allow_bookmarks']) ? append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", "f={$this->forum_id}&t={$this->topic_id}&bookmark=1&hash=" . generate_link_hash("topic_{$this->topic_id}")) : '', 600 | 'U_VIEW_RESULTS' => append_sid("{$this->phpbb_root_path}viewtopic.$this->php_ext", "f=$this->forum_id&t=$this->topic_id&view=viewpoll"), 601 | )); 602 | } 603 | 604 | public function core_memberlist_view_profile($event) 605 | { 606 | if (empty($this->core->seo_opt['url_rewrite'])) 607 | { 608 | return; 609 | } 610 | 611 | $member = $event['member']; 612 | 613 | $this->core->set_user_url($member['username'], $member['user_id']); 614 | $this->core->seo_path['canonical'] = $this->core->drop_sid(append_sid("{$this->phpbb_root_path}memberlist.{$this->php_ext}", "mode=viewprofile&u=" . $member['user_id'])); 615 | $this->core->seo_opt['zero_dupe']['redir_def'] = array( 616 | 'mode' => array('val' => 'viewprofile', 'keep' => true), 617 | 'u' => array('val' => $member['user_id'], 'keep' => true, 'force' => true), 618 | ); 619 | 620 | $this->core->zero_dupe(); 621 | 622 | $event['member'] = $member; 623 | } 624 | 625 | public function core_modify_username_string($event) 626 | { 627 | $modes = array('profile' => 1, 'full' => 1); 628 | 629 | $mode = $event['mode']; 630 | 631 | if (!isset($modes[$mode])) 632 | { 633 | return; 634 | } 635 | 636 | $user_id = (int) $event['user_id']; 637 | 638 | if ( 639 | !$user_id || 640 | $user_id == ANONYMOUS || 641 | ($this->user->data['user_id'] != ANONYMOUS && !$this->auth->acl_get('u_viewprofile')) 642 | ) 643 | { 644 | return; 645 | } 646 | 647 | $username = $event['username']; 648 | $custom_profile_url = $event['custom_profile_url']; 649 | 650 | $this->core->set_user_url($username, $user_id); 651 | 652 | if ($custom_profile_url !== false) 653 | { 654 | $profile_url = reapply_sid($custom_profile_url . (strpos($custom_profile_url, '?') !== false ? '&' : '?' ) . 'u=' . (int) $user_id); 655 | } 656 | else 657 | { 658 | $profile_url = append_sid("{$this->phpbb_root_path}memberlist.{$this->php_ext}", 'mode=viewprofile&u=' . (int) $user_id); 659 | } 660 | 661 | // Return profile 662 | if ($mode == 'profile') 663 | { 664 | $event['username_string'] = $profile_url; 665 | 666 | return; 667 | } 668 | 669 | $event['username_string'] = str_replace(array('{PROFILE_URL}', '{USERNAME_COLOUR}', '{USERNAME}'), array($profile_url, $event['username_colour'], $event['username']), (!$event['username_colour']) ? $event['_profile_cache']['tpl_profile'] : $event['_profile_cache']['tpl_profile_colour']); 670 | } 671 | 672 | /* 673 | * core_append_sid event 674 | * you can speed up this if you add : 675 | * 676 | 677 | // www.phpBB-SEO.com SEO TOOLKIT BEGIN 678 | // We bypass events/hooks here, the same effect as a standalone event/hook, 679 | // which we want, but much faster ;-) 680 | if (!empty($this->core->seo_opt['url_rewrite'])) 681 | { 682 | return $this->core->url_rewrite($url, $params, $is_amp, $session_id); 683 | } 684 | // www.phpBB-SEO.com SEO TOOLKIT END 685 | 686 | * 687 | * after : 688 | * 689 | 690 | function append_sid($url, $params = false, $is_amp = true, $session_id = false) 691 | { 692 | 693 | * 694 | * in includes/fucntions.php 695 | * 696 | */ 697 | public function core_append_sid($event) 698 | { 699 | if (!empty($this->core->seo_opt['url_rewrite'])) 700 | { 701 | $event['append_sid_overwrite'] = $this->core->url_rewrite($event['url'], $event['params'], $event['is_amp'], $event['session_id'], $event['is_route']); 702 | } 703 | } 704 | 705 | public function core_pagination_generate_page_link($event) 706 | { 707 | static $paginated = array(), $find = array('{SN}', '{SV}'); 708 | 709 | $base_url = $event['base_url']; 710 | $on_page = $event['on_page']; 711 | $start_name = $event['start_name']; 712 | $per_page = $event['per_page']; 713 | 714 | if (!is_string($base_url)) 715 | { 716 | return; 717 | } 718 | 719 | // do ourselves a favor 720 | $base_url = trim($base_url, '?'); 721 | if (!isset($paginated[$base_url])) 722 | { 723 | $rewriten = $this->core->url_rewrite($base_url); 724 | 725 | @list($rewriten, $qs) = explode('?', $rewriten, 2); 726 | if ( 727 | // rewriten urls are absolute 728 | !preg_match('`^(https?\:)?//`i', $rewriten) || 729 | // they are not php scripts 730 | preg_match('`\.' . $this->php_ext . '$`i', $rewriten) 731 | ) 732 | { 733 | // in such case, do as usual 734 | $qs = $qs ? "?$qs&" : '?'; 735 | $paginated[$base_url] = $rewriten . $qs . '{SN}={SV}'; 736 | } 737 | else 738 | { 739 | $hasExt = preg_match('`^((https?\:)?//[^/]+.+?)(\.[a-z0-9]+)$`i', $rewriten); 740 | 741 | if ($hasExt) 742 | { 743 | // start location is before the ext 744 | $rewriten = preg_replace('`^((https?\:)?//[^/]+.+?)(\.[a-z0-9]+)$`i', '\1' . $this->core->seo_delim['start'] . '{SV}\3', $rewriten); 745 | } 746 | else 747 | { 748 | // start is appened 749 | $rewriten = rtrim($rewriten, '/') . '/' . $this->core->seo_static['pagination'] . '{SV}' . $this->core->seo_ext['pagination']; 750 | } 751 | 752 | $paginated[$base_url] = $rewriten . ($qs ? "?$qs" : ''); 753 | } 754 | } 755 | 756 | // we'll see if start_name has use cases, and we can still work with rewriterules 757 | $event['generate_page_link_override'] = ($on_page > 1) ? str_replace($find, array($start_name, ($on_page - 1) * $per_page), $paginated[$base_url]) : $base_url; 758 | } 759 | 760 | public function core_submit_post_end($event) 761 | { 762 | global $post_data; // god save hax 763 | 764 | $data = $event['data']; 765 | $mode = $event['mode']; 766 | 767 | $post_id = $data['post_id']; 768 | $forum_id = $data['forum_id']; 769 | 770 | // for some reasons, $post_mode cannot be globallized without being nullized ... 771 | if ($mode == 'post') 772 | { 773 | $post_mode = 'post'; 774 | } 775 | else if ($mode != 'edit') 776 | { 777 | $post_mode = 'reply'; 778 | } 779 | else if ($mode == 'edit') 780 | { 781 | $post_mode = ($data['topic_posts_approved'] + $data['topic_posts_unapproved'] + $data['topic_posts_softdeleted'] == 1) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit')); 782 | } 783 | 784 | if ($mode == 'post' || ($mode == 'edit' && $data['topic_first_post_id'] == $post_id)) 785 | { 786 | $this->core->set_url($data['forum_name'], $forum_id, 'forum'); 787 | 788 | $_parent = $post_data['topic_type'] == POST_GLOBAL ? $this->core->seo_static['global_announce'] : $this->core->seo_url['forum'][$forum_id]; 789 | $_t = !empty($data['topic_id']) ? max(0, (int) $data['topic_id'] ) : 0; 790 | $_url = $this->core->url_can_edit($forum_id) ? utf8_normalize_nfc($this->request->variable('url', '', true)) : (isset($post_data['topic_url']) ? $post_data['topic_url'] : '' ); 791 | 792 | if (!$this->core->check_url('topic', $_url, $_parent)) 793 | { 794 | if (!empty($_url)) 795 | { 796 | // Here we get rid of the seo delim (-t) and put it back even in simple mod 797 | // to be able to handle all cases at once 798 | $_url = preg_replace('`' . $this->core->seo_delim['topic'] . '$`i', '', $_url); 799 | $_title = $this->core->get_url_info('topic', $_url . $this->core->seo_delim['topic'] . $_t); 800 | } 801 | else 802 | { 803 | $_title = $this->core->modrtype > 2 ? censor_text($post_data['post_subject']) : ''; 804 | } 805 | 806 | unset($this->core->seo_url['topic'][$_t]); 807 | 808 | $_url = $this->core->get_url_info('topic', $this->core->prepare_url('topic', $_title, $_t, $_parent, (( empty($_title) || ($_title == $this->core->seo_static['topic'])) ? true : false)), 'url'); 809 | 810 | unset($this->core->seo_url['topic'][$_t]); 811 | } 812 | 813 | $data['topic_url'] = $post_data['topic_url'] = $_url; 814 | } 815 | 816 | switch ($post_mode) 817 | { 818 | case 'post': 819 | case 'edit_topic': 820 | case 'edit_first_post': 821 | if (isset($data['topic_url'])) 822 | { 823 | $sql = 'UPDATE ' . TOPICS_TABLE . ' 824 | SET ' . $this->db->sql_build_array('UPDATE', array('topic_url' => $data['topic_url'])) . ' 825 | WHERE topic_id = ' . (int) $data['topic_id']; 826 | $this->db->sql_query($sql); 827 | } 828 | 829 | break; 830 | } 831 | 832 | $this->core->set_url($data['forum_name'], $data['forum_id'], 'forum'); 833 | 834 | $params = $add_anchor = ''; 835 | 836 | // --> Until https://tracker.phpbb.com/browse/PHPBB3-13164 is fixed 837 | // we need to compute post_visibility as the global hax fails for some reasons 838 | $post_visibility = ITEM_APPROVED; 839 | 840 | // Check the permissions for post approval. 841 | // Moderators must go through post approval like ordinary users. 842 | if (!$this->auth->acl_get('f_noapprove', $data['forum_id'])) 843 | { 844 | // Post not approved, but in queue 845 | $post_visibility = ITEM_UNAPPROVED; 846 | switch ($post_mode) 847 | { 848 | case 'edit_first_post': 849 | case 'edit': 850 | case 'edit_last_post': 851 | case 'edit_topic': 852 | $post_visibility = ITEM_REAPPROVE; 853 | break; 854 | } 855 | } 856 | 857 | // MODs/Extensions are able to force any visibility on posts 858 | if (isset($data['force_approved_state'])) 859 | { 860 | $post_visibility = (in_array((int) $data['force_approved_state'], array(ITEM_APPROVED, ITEM_UNAPPROVED, ITEM_DELETED, ITEM_REAPPROVE))) ? (int) $data['force_approved_state'] : $post_visibility; 861 | } 862 | if (isset($data['force_visibility'])) 863 | { 864 | $post_visibility = (in_array((int) $data['force_visibility'], array(ITEM_APPROVED, ITEM_UNAPPROVED, ITEM_DELETED, ITEM_REAPPROVE))) ? (int) $data['force_visibility'] : $post_visibility; 865 | } 866 | 867 | $data['post_visibility'] = $post_visibility; 868 | // <-- Until https://tracker.phpbb.com/browse/PHPBB3-13164 is fixed 869 | 870 | if ($data['post_visibility'] == ITEM_APPROVED) 871 | { 872 | $params .= '&t=' . $data['topic_id']; 873 | 874 | if ($mode != 'post') 875 | { 876 | $params .= '&p=' . $data['post_id']; 877 | $add_anchor = '#p' . $data['post_id']; 878 | } 879 | } 880 | else if ($mode != 'post' && $post_mode != 'edit_first_post' && $post_mode != 'edit_topic') 881 | { 882 | $params .= '&t=' . $data['topic_id']; 883 | } 884 | 885 | if ($params) 886 | { 887 | $data['topic_type'] = $post_data['topic_type']; 888 | 889 | $this->core->prepare_topic_url($data); 890 | } 891 | 892 | $url = (!$params) ? "{$this->phpbb_root_path}viewforum.{$this->php_ext}" : "{$this->phpbb_root_path}viewtopic.{$this->php_ext}"; 893 | $url = $this->core->url_rewrite($url, 'f=' . $data['forum_id'] . $params, true, false, false, true) . $add_anchor; 894 | 895 | $event['url'] = $url; 896 | $event['data'] = $data; 897 | } 898 | 899 | public function core_posting_modify_template_vars($event) 900 | { 901 | $page_data = $event['page_data']; 902 | $submit = $event['submit']; 903 | $preview = $event['preview']; 904 | $refresh = $event['refresh']; 905 | $mode = $event['mode']; 906 | $post_id = $event['post_id']; 907 | $forum_id = $event['forum_id']; 908 | $post_data = $event['post_data']; 909 | 910 | if ($submit || $preview || $refresh) 911 | { 912 | if ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)) 913 | { 914 | $this->core->set_url($post_data['forum_name'], $forum_id, 'forum'); 915 | 916 | $_parent = $post_data['topic_type'] == POST_GLOBAL ? $this->core->seo_static['global_announce'] : $this->core->seo_url['forum'][$forum_id]; 917 | $_t = !empty($post_data['topic_id']) ? max(0, (int) $post_data['topic_id'] ) : 0; 918 | $_url = $this->core->url_can_edit($forum_id) ? utf8_normalize_nfc($this->request->variable('url', '', true)) : (isset($post_data['topic_url']) ? $post_data['topic_url'] : ''); 919 | 920 | if (!$this->core->check_url('topic', $_url, $_parent)) 921 | { 922 | if (!empty($_url)) 923 | { 924 | // Here we get rid of the seo delim (-t) and put it back even in simple mod 925 | // to be able to handle all cases at once 926 | $_url = preg_replace('`' . $this->core->seo_delim['topic'] . '$`i', '', $_url); 927 | $_title = $this->core->get_url_info('topic', $_url . $this->core->seo_delim['topic'] . $_t); 928 | } 929 | else 930 | { 931 | $_title = $this->core->modrtype > 2 ? censor_text($post_data['post_subject']) : ''; 932 | } 933 | 934 | unset($this->core->seo_url['topic'][$_t]); 935 | 936 | $_url = $this->core->get_url_info('topic', $this->core->prepare_url('topic', $_title, $_t, $_parent, ((empty($_title) || ($_title == $this->core->seo_static['topic'])) ? true : false)), 'url'); 937 | 938 | unset($this->core->seo_url['topic'][$_t]); 939 | } 940 | 941 | $post_data['topic_url'] = $_url; 942 | } 943 | } 944 | $page_data['TOPIC_URL'] = isset($post_data['topic_url']) ? preg_replace('`' . $this->core->seo_delim['topic'] . '$`i', '', $post_data['topic_url']) : ''; 945 | $page_data['S_URL'] = ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id'])) ? $this->core->url_can_edit($forum_id) : false; 946 | 947 | $event['page_data'] = $page_data; 948 | } 949 | 950 | public function core_display_user_activity_modify_actives($event) 951 | { 952 | 953 | $active_t_row = $event['active_t_row']; 954 | $active_f_row = $event['active_f_row']; 955 | 956 | if (!empty($active_t_row)) 957 | { 958 | $sql_array = array( 959 | 'SELECT' => 't.topic_title, t.topic_type ' . (!empty($this->core->seo_opt['sql_rewrite']) ? ', t.topic_url' : '') . ', f.forum_id, f.forum_name', 960 | 'FROM' => array( 961 | TOPICS_TABLE => 't', 962 | ), 963 | 'LEFT_JOIN' => array( 964 | array( 965 | 'FROM' => array(FORUMS_TABLE => 'f'), 966 | 'ON' => 'f.forum_id = t.forum_id', 967 | ), 968 | ), 969 | 'WHERE' => 't.topic_id = ' . (int) $active_t_row['topic_id'] 970 | ); 971 | $result = $this->db->sql_query($this->db->sql_build_query('SELECT', $sql_array)); 972 | $seo_active_t_row = $this->db->sql_fetchrow($result); 973 | $this->db->sql_freeresult($result); 974 | if ($seo_active_t_row) { 975 | $active_t_row = array_merge($active_t_row, $seo_active_t_row); 976 | $active_t_forum_id = (int) $active_t_row['forum_id']; 977 | $this->core->prepare_topic_url($active_t_row); 978 | } 979 | } 980 | 981 | if (!empty($active_f_row['num_posts'])) 982 | { 983 | $this->core->set_url($active_f_row['forum_name'], $active_f_row['forum_id'], 'forum'); 984 | } 985 | } 986 | } 987 | -------------------------------------------------------------------------------- /language/en/acp_usu.php: -------------------------------------------------------------------------------- 1 | 'phpBB SEO', 40 | 'ACP_MOD_REWRITE' => 'URL Rewriting settings', 41 | // ACP phpBB seo class 42 | 'ACP_PHPBB_SEO_CLASS' => 'phpBB SEO Class settings', 43 | 'ACP_PHPBB_SEO_CLASS_EXPLAIN' => 'Here you can set up various options of the phpBB SEO %1$s mod (%2$s).
The various default settings such as the delimiters and suffixes still must be set up in phpBB/ext/phpbbseo/usu/customise.php, since changing these implies an .htaccess update and most likely appropriate redirections.%3$s', 44 | 'ACP_PHPBB_SEO_VERSION' => 'Version', 45 | 'ACP_PHPBB_SEO_MODE' => 'Mode', 46 | 'ACP_SEO_SUPPORT_FORUM' => 'Support Forum', 47 | // ACP forum URLs 48 | 'ACP_FORUM_URL' => 'Forum URL Management', 49 | 'ACP_FORUM_URL_EXPLAIN' => 'Here you can see what’s in the cache file containing the forum title to inject in their URLs.
Forum in green colors are cached, the one in red are not yet.

Please Note :
any-title-fxx/ will always be properly redirected with the Zero Duplicate but it won’t be the case if you edit any-title/ to something-else/.
In such case, any-title/ will for now be treated as a forum that does not exist if you do not set appropriate redirections.
', 50 | 'ACP_NO_FORUM_URL' => 'Forum URL Management disabled
The forum URL management is only available in advanced and Mixed mode and when Forum URL caching is activated.
Forum URLs already configured will stay active in advanced and Mixed mode.', 51 | // ACP .htaccess 52 | 'ACP_REWRITE_CONF' => 'Server Config', 53 | 'ACP_REWRITE_CONF_EXPLAIN' => 'This tool will help you out building your server config.
The version proposed below is based on your phpBB/ext/phpbbseo/usu/customise.php settings.
You can edit the $seo_ext and $seo_static values before you install the server config to get personalized URLs.
You can for example choose to use .htm instead of .html, "message" instead of "post" "mysite-team" instead of "the-team" and so on.
If you edit these while they were already indexed in SE, you’ll need personalized redirections.
The default settings are not bad at all, you can skip this step without worries if you prefer,
though it’s the best time to do it. Doing it after a while will require some personalized redirections.', 54 | 'SEO_SERVER_CONF_RBASE' => 'Config Scope', 55 | 'SEO_SERVER_CONF_RBASE_EXPLAIN' => 'The server config can be limited to phpBB’s physical directory. It is usually desired to limit teh server config to where it is useful, but it can be handy to group everything in the domain’s root.', 56 | 'SEO_SERVER_CONF_SLASH' => 'RegEx Right Slash', 57 | 'SEO_SERVER_CONF_SLASH_EXPLAIN' => 'Depending on the specific host you are using, you might have to get rid of or add the slash ("/") at the beginning of the right part of each RewriteRules. This particular slash is for example used by default when .htaccess are located at the root level and it’s the contrary for when phpBB would be installed in a sub-folder with an .htaccess in the same folder.
Default settings should generally work, but if it’s not the case, try a server config with this option.', 58 | 'SEO_SERVER_CONF_WSLASH' => 'RegEx Left Slash', 59 | 'SEO_SERVER_CONF_WSLASH_EXPLAIN' => 'Depending on the specific host you are using, you might have to add a slash ("/") at the beginning of the left part of each RewriteRules. This particular slash ("/") is for example not used by default with Apache but is with Ngix.
Default settings should generally work, but if it’s not the case, try a server config with this option.', 60 | 'SEO_MORE_OPTION' => 'More Options', 61 | 'SEO_MORE_OPTION_EXPLAIN' => 'If the first suggested .htaccess does not work.
First make sure mod_rewrite is activated on your server.
Then, make sure you uploaded it in the right folder, and that another one is not perturbing.
If not enough, hit the "more option" button.', 62 | 'SEO_SERVER_CONF_SAVE' => 'Save the server config', 63 | 'SEO_SERVER_CONF_SAVE_EXPLAIN' => 'If checked, server config files will be generated upon submit in the phpbb_seo/cache/ folder. They are ready to go with your last settings, just pick the proper file/config for you server and put it in the right place.', 64 | 'SEO_HTACCESS_ROOT_MSG' => 'Once you are ready, you can select the .htaccess code, and paste it in an .htaccess file or use the "Save .htaccess" option below.
This .htaccess is meant to be used in the domain’s root folder, which in your case is where %1$s leads to in your FTP.

You can generate an .htaccess meant to be used in the eventual phpBB sub-directory using the "htaccess location" option below.', 65 | 'SEO_HTACCESS_FOLDER_MSG' => 'Once you are ready, you can select the .htaccess code, and paste it in an .htaccess file or use the "Save .htaccess" option below.
This .htaccess is meant to be used in the folder where phpBB is installed, which in your case is where %1$s leads to in your FTP.', 66 | 'SEO_SERVER_CONF_CAPTION' => 'Caption', 67 | 'SEO_SERVER_CONF_CAPTION_COMMENT' => 'Comments', 68 | 'SEO_SERVER_CONF_CAPTION_STATIC' => 'Static parts, editable in phpBB/ext/phpbbseo/usu/customise.php', 69 | 'SEO_SERVER_CONF_CAPTION_DELIM' => 'Delimiters, editable in phpBB/ext/phpbbseo/usu/customise.php', 70 | 'SEO_SERVER_CONF_CAPTION_SUFFIX' => 'Suffixes, editable in phpBB/ext/phpbbseo/usu/customise.php', 71 | 'SEO_SERVER_CONF_CAPTION_SLASH' => 'Optional slashes', 72 | 'SEO_SLASH_DEFAULT' => 'Default', 73 | 'SEO_SLASH_ALT' => 'Alternate', 74 | 'SEO_MOD_TYPE_ER' => 'The mod rewrite type is not set up properly in phpBB/ext/phpbbseo/usu/core.php.', 75 | 'SEO_SHOW' => 'Show', 76 | 'SEO_HIDE' => 'Hide', 77 | 'SEO_SELECT_ALL' => 'Select all', 78 | 'SEO_APACHE_CONF' => 'Apache config', 79 | //Ngix 80 | 'SEO_NGIX_CONF' => 'Ngix config', 81 | 'SEO_NGIX_CONF_EXPLAIN' => 'Copy and paste this code into your webserver configuration file and restart Ngix.', 82 | // ACP extended 83 | 'ACP_SEO_EXTENDED_EXPLAIN' => 'phpBB SEO mods extended settings.', 84 | 'SEO_EXTERNAL_LINKS' => 'External links', 85 | 'SEO_EXTERNAL_LINKS_EXPLAIN' => 'Open, or not, external links in a new browser window / tab', 86 | 'SEO_EXTERNAL_SUBDOMAIN' => 'Sub-domain links', 87 | 'SEO_EXTERNAL_SUBDOMAIN_EXPLAIN' => 'Treat, or not, links to eventual sub-domains of your forum’s domain as internal links to open in the same window', 88 | 'SEO_EXTERNAL_CLASSES' => 'External by css class', 89 | 'SEO_EXTERNAL_CLASSES_EXPLAIN' => 'here you can define some css classes that will activate the new window feature on links using it. Comma separated list of class names, example: postlink,external', 90 | // Titles 91 | 'SEO_PAGE_TITLES' => 'Page titles', 92 | 'SEO_APPEND_SITENAME' => 'Append site name to page titles', 93 | 'SEO_APPEND_SITENAME_EXPLAIN' => 'Append, or not, site name to page titles.
Warning :
This option requires that you properly edited all your overall_header.html for the Optimal titles mod, site name could be repeated in page titles otherwise', 94 | // Meta 95 | 'SEO_META' => 'Meta tags', 96 | 'SEO_META_TITLE' => 'Meta title', 97 | 'SEO_META_TITLE_EXPLAIN' => 'Default Meta title, used on page not defining a page title. Inactivates the meta title tag if empty', 98 | 'SEO_META_DESC' => 'Meta description', 99 | 'SEO_META_DESC_EXPLAIN' => 'Default Meta description, used on page not defining a meta description', 100 | 'SEO_META_DESC_LIMIT' => 'Meta description limit', 101 | 'SEO_META_DESC_LIMIT_EXPLAIN' => 'Limit in words for the Meta description tag', 102 | 'SEO_META_BBCODE_FILTER' => 'BBcodes Filter', 103 | 'SEO_META_BBCODE_FILTER_EXPLAIN' => 'Comma separated list of BBcodes which will be fully filtered in meta tags. Others will simply be deactivated and their content may appear in meta tags.
Default filtered BBcodes are : img,url,flash,code.
Attention :
Not filtering img, url and flash BBcode is not a good idea, as well as the code one in most cases. Generally speaking, only keep BBcode content for BBcodes that have interesting content for metas', 104 | 'SEO_META_KEYWORDS' => 'Meta keywords', 105 | 'SEO_META_KEYWORDS_EXPLAIN' => 'Default Meta keywords, used on page not defining meta keywords. Simply enter a list of keywords', 106 | 'SEO_META_KEYWORDS_LIMIT' => 'Meta keywords limit', 107 | 'SEO_META_KEYWORDS_LIMIT_EXPLAIN' => 'Limit in words for the Meta keywords tag', 108 | 'SEO_META_MIN_LEN' => 'Short words filter', 109 | 'SEO_META_MIN_LEN_EXPLAIN' => 'Minimum amount of characters in a word to be included in the Meta keywords tag, only words composed of more than this limit will be taken into account', 110 | 'SEO_META_CHECK_IGNORE' => 'Ignore words filter', 111 | 'SEO_META_CHECK_IGNORE_EXPLAIN' => 'Apply, or not, the search_ignore_words.php exclusions in the meta keywords tag', 112 | 'SEO_META_LANG' => 'Meta lang', 113 | 'SEO_META_LANG_EXPLAIN' => 'Lang code used in meta tags', 114 | 'SEO_META_COPY' => 'Meta copyright', 115 | 'SEO_META_COPY_EXPLAIN' => 'Copyright used in meta tags. Inactivates the meta copyright tag if empty', 116 | 'SEO_META_FILE_FILTER' => 'File filter', 117 | 'SEO_META_FILE_FILTER_EXPLAIN' => 'Comma separated list of physical php script file name that should not be indexed (robots:noindex,follow). Example : ucp,mcp', 118 | 'SEO_META_GET_FILTER' => '_GET filter', 119 | 'SEO_META_GET_FILTER_EXPLAIN' => 'Comma separated list of _GET variable that should not be indexed (robots:noindex,follow). Example : style,hilit,sid', 120 | 'SEO_META_ROBOTS' => 'Meta Robots', 121 | 'SEO_META_ROBOTS_EXPLAIN' => 'The Meta Robots tag tells bots how to index your pages. It is set by default to "index,follow", which allow bots to index and cache your pages and to follow links in them. Inactivates the meta Robots tag if empty.
Warning :
This tag is sensible, if you were to use "noindex", none of your pages would be indexed', 122 | 'SEO_META_NOARCHIVE' => 'Noarchive Meta Robots', 123 | 'SEO_META_NOARCHIVE_EXPLAIN' => 'The Noarchive Meta Robots tag tells bots if they can or not cache the page. It only concerns caching, it has no relation to indexing and SERPs of the page.
You can select here a list of forums that will have the "noarchive" option added to their meta robots.
This feature can be handy, for example when you have some forums opened to bots but closed to guests. Adding the "noarchive" option to them will prevent guests from accessing content through the search engine cache, while the forum and its topic will still appear in SERPs', 124 | 'SEO_META_OG' => 'Open Graph', 125 | 'SEO_META_OG_EXPLAIN' => 'Activate Open Graph tags to allow the Facebook Crawler to generate previews when your content is shared on Facebook.', 126 | 'SEO_META_FB_APP_ID' => 'Facebook App ID', 127 | 'SEO_META_FB_APP_ID_EXPLAIN' => 'The unique ID that lets Facebook know the identity of your site. This is crucial for Facebook Insights to work properly.', 128 | // Install 129 | 'SEO_INSTALL_PANEL' => 'phpBB SEO Installation Panel', 130 | 'SEO_ERROR_INSTALL' => 'An error occurred during the installation process. Uninstall once is safer before you retry.', 131 | 'SEO_ERROR_INSTALLED' => 'The %s module is already installed.', 132 | 'SEO_ERROR_ID' => 'The %1$ module had no ID.', 133 | 'SEO_ERROR_UNINSTALLED' => 'The %s module is already uninstalled.', 134 | 'SEO_ERROR_INFO' => 'Information :', 135 | 'SEO_FINAL_INSTALL_PHPBB_SEO' => 'Login to ACP', 136 | 'SEO_FINAL_UNINSTALL_PHPBB_SEO' => 'Return to forum index', 137 | 'CAT_INSTALL_PHPBB_SEO' => 'Installation', 138 | 'CAT_UNINSTALL_PHPBB_SEO' => 'Un-Installation', 139 | 'SEO_OVERVIEW_TITLE' => 'phpBB SEO Ultimate SEO URL Overview', 140 | 'SEO_OVERVIEW_BODY' => 'Welcome to our public release of the %1$s phpBB3 SEO mod rewrite %2$s.

Please read the release thread for more information

Note: You must have already performed the required code changes and uploaded all the new files before you can proceed with this install wizard.

This installation system will guide you through the process of installing the phpBB3 SEO mod rewrite admin control panel. It will allow you to accurately choose your phpBB rewritten URL standard for the best results in search engines

.', 141 | 'CAT_SEO_PREMOD' => 'phpBB SEO Premod', 142 | 'SEO_PREMOD_TITLE' => 'phpBB SEO Premod overview', 143 | 'SEO_PREMOD_BODY' => 'Welcome to our public release of the phpBB SEO Premod.

Please read the release thread for more information

Note: You will be able to choose between the three phpBB3 SEO mod rewrites.

The three different URL rewriting standards available :

This choice is very important, we encourage you to take the time to fully discover the SEO features of this premod before you go online.
This premod is as simple to install as phpBB3, just follow the regular process.

144 |

Requirements for URL rewriting :

145 |
    146 |
  • Apache server (linux OS) with mod_rewrite module.
  • 147 |
  • IIS server (windows OS) with isapi_rewrite module, but you will need to adapt the RewriteRules in the httpd.ini
  • 148 |
149 |

Once installed, you will need to go to the ACP to set up and activate the mod.

', 150 | 'SEO_LICENCE_TITLE' => 'RECIPROCAL PUBLIC LICENCE', 151 | 'SEO_LICENCE_BODY' => 'The phpBB SEO mod rewrites are released under the RPL licence which states you cannot remove the phpBB SEO credits.
For more details about possible exceptions, please contact a phpBB SEO administrator (primarily SeO or dcz).', 152 | 'SEO_PREMOD_LICENCE' => 'The phpBB SEO mod rewrites and the Zero duplicate included in this Premod are released under the RPL licence which states you cannot remove the phpBB SEO credits.
For more details about possible exceptions, please contact a phpBB SEO administrator (primarily SeO or dcz).', 153 | 'SEO_SUPPORT_TITLE' => 'Support', 154 | 'SEO_SUPPORT_BODY' => 'Full support will be given in the %2$s SEO URL forum. We will provide answers to general setup questions, configuration problems, and support for determining common problems.

Be sure to visit our Search Engine Optimization forums.

You should register, log in and subscribe to the release thread to be notified by mail upon each update.', 155 | 'SEO_PREMOD_SUPPORT_BODY' => 'Full support will be given in the phpBB SEO Premod forum. We will provide answers to general setup questions, configuration problems, and support for determining common problems.

Be sure to visit our Search Engine Optimization forums.

You should register, log in and subscribe to the release thread to be notified by mail upon each update.', 156 | 'SEO_INSTALL_INTRO' => 'Welcome to the phpBB SEO Installation Wizard', 157 | 'SEO_INSTALL_INTRO_BODY' => '

You are about to install the %1$s phpBB SEO mod rewrite %2$s. This install tool will activate the phpBB SEO mod rewrite control panel in phpBB ACP.

Once installed, you will need to go to the ACP to set up and activate the mod.

158 |

Note: If it’s the first time you try this mod, we strongly encourage you to take the time to test the various URL standard this mod can output on a local or private test server. This way, you won’t show different URLs to bots every other day while testing, and you won’t discover a month after that you would have preferred different URLs. Patience is virtue SEO wise and even if the zero duplicate makes the HTTP redirecting very easy, you don’t want to redirect all your forum’s URLs too often.


159 |

Requirements :

160 |
    161 |
  • Apache server (linux OS) with mod_rewrite module.
  • 162 |
  • IIS server (windows OS) with isapi_rewrite module, but you will need to adapt the RewriteRules in the httpd.ini
  • 163 |
', 164 | 'SEO_INSTALL' => 'Install', 165 | 'UN_SEO_INSTALL_INTRO' => 'Welcome to the phpBB SEO uninstall Wizard', 166 | 'UN_SEO_INSTALL_INTRO_BODY' => '

You are about to uninstall the %1$s phpBB SEO mod rewrite %2$s ACP module.

167 |

Note: This will not deactivate URL rewriting on your board as long as the phpBB files are still modded.

', 168 | 'UN_SEO_INSTALL' => 'Uninstall', 169 | 'SEO_INSTALL_CONGRATS' => 'Congratulations!', 170 | 'SEO_INSTALL_CONGRATS_EXPLAIN' => '

You have now successfully installed the %1$s phpBB3 SEO mod rewrite %2$s. You should now go to phpBB ACP and proceed with the mod rewrite settings.

171 |

In the new phpBB SEO category, you will be able to :

172 |

Set up and activate URL rewriting

173 |

Take your time, that’s where you will choose how your URLs will look like. The zero duplicate options will as well be set up from here when installed.

174 |

Accurately choose your forum’s URL

175 |

Using the Mixed or the Advanced mod, you will be able to dissociate Forum URLs from their titles and elect to use whatever keyword you may like in them

176 |

Generate a personalized .htaccess

177 |

Once you will have set up the above options, you will be able to generate a personalized .htaccess within no time and save it directly on the server.

', 178 | 'UN_SEO_INSTALL_CONGRATS' => 'The phpBB SEO ACP module was removed.', 179 | 'UN_SEO_INSTALL_CONGRATS_EXPLAIN' => '

You have now successfully uninstalled the %1$s phpBB3 SEO mod rewrite %2$s.

180 |

This will not deactivate URL rewriting on your board as long as the phpBB files are still modded.

', 181 | 'SEO_VALIDATE_INFO' => 'Validation Info :', 182 | 'SEO_SQL_ERROR' => 'SQL error', 183 | 'SEO_SQL_TRY_MANUALLY' => 'The db user does not seems to have enough rights to run the required SQL query, please run it manually (phpMyadmin) :', 184 | // Security 185 | 'SEO_LOGIN' => 'The board requires you to be registered and logged in to view this page.', 186 | 'SEO_LOGIN_ADMIN' => 'The board requires you to be logged in as admin to view this page.
Your session has been destroyed for security purposes.', 187 | 'SEO_LOGIN_FOUNDER' => 'The board requires you to be logged in as the founder to view this page.', 188 | 'SEO_LOGIN_SESSION' => 'Session Check failed.
The Settings were not altered.
Your session has been destroyed for security purposes.', 189 | // Cache status 190 | 'SEO_CACHE_FILE_TITLE' => 'Cache file status', 191 | 'SEO_CACHE_STATUS' => 'The cache directory configured is : %s', 192 | 'SEO_CACHE_FOUND' => 'The cache directory was successfully found.', 193 | 'SEO_CACHE_NOT_FOUND' => 'The cache directory was not found.', 194 | 'SEO_CACHE_WRITABLE' => 'The cache directory is writable.', 195 | 'SEO_CACHE_UNWRITABLE' => 'The cache directory is not writable. You need to CHMOD it to 0777.', 196 | 'SEO_CACHE_INNER_UNWRITABLE' => 'Some files within the cache directory may not be writable, make sure you properly CHMOD the cache directory AND all files in it.', 197 | 'SEO_CACHE_FORUM_NAME' => 'Forum name', 198 | 'SEO_CACHE_URL_OK' => 'URL Cached', 199 | 'SEO_CACHE_URL_NOT_OK' => 'This Forum URL is not cached', 200 | 'SEO_CACHE_URL' => 'Final URL', 201 | 'SEO_CACHE_MSG_OK' => 'The cache file was updated successfully.', 202 | 'SEO_CACHE_MSG_FAIL' => 'An error occurred while updating the cache file.', 203 | 'SEO_CACHE_UPDATE_FAIL' => 'The URL you entered cannot be used, the cache was left untouched.', 204 | // Seo advices 205 | 'SEO_ADVICE_DUPE' => 'A duplicate entry in title was detected for a forum URL : %1$s.
It will stay unchanged until you update it.', 206 | 'SEO_ADVICE_RESERVED' => 'A reserved (used by other urls, such as members profiles and such) entry in title was detected for a forum URL : %1$s.
It will stay unchanged until you update it.', 207 | 'SEO_ADVICE_LENGTH' => 'The URL cached is a bit too long.
Consider using a smaller one', 208 | 'SEO_ADVICE_DELIM' => 'The URL cached contains the SEO delimiter and ID.
Consider setting up an original one.', 209 | 'SEO_ADVICE_WORDS' => 'The URL cached contains a bit too many words.
Consider setting up an better one.', 210 | 'SEO_ADVICE_DEFAULT' => 'The ending URL, after formatting, is the default.
Consider setting up an original one.', 211 | 'SEO_ADVICE_START' => 'Forum URLs cannot end with a pagination parameter.
They were thus removed from the one submitted.', 212 | 'SEO_ADVICE_DELIM_REM' => 'Submitted forum URLs cannot end with a forum delimiter.
They were thus removed from one submitted.', 213 | // Mod Rewrite type 214 | 'ACP_SEO_SIMPLE' => 'Simple', 215 | 'ACP_SEO_MIXED' => 'Mixed', 216 | 'ACP_SEO_ADVANCED' => 'Advanced', 217 | 'ACP_ULTIMATE_SEO_URL' => 'Ultimate SEO URL', 218 | // URL Sync 219 | 'SYNC_REQ_SQL_REW' => 'You must activate SQL Rewriting to use this script !', 220 | 'SYNC_TITLE' => 'URL Synchronization', 221 | 'SYNC_WARN' => 'Attention, do not stop the script until it ends, and back up your db before you use it!', 222 | 'SYNC_COMPLETE' => 'Synchronization completed !', 223 | 'SYNC_RESET_COMPLETE' => 'Reset completed !', 224 | 'SYNC_PROCESSING' => 'Processing, please wait ...

%1$s%% have been processed.
So far, %2$s items have been processed.
%3$s items in total, %4$s are processed at a time.
Speed : %5$s item/s.
Time spent for this cycle : %6$ss
Estimated time left : %7$s minute(s)', 225 | 'SYNC_ITEM_UPDATED' => '%1$s items have been updated', 226 | 'SYNC_TOPIC_URLS' => 'Start topic URLs synchronization', 227 | 'SYNC_RESET_TOPIC_URLS' => 'Reset all topic URLs', 228 | 'SYNC_TOPIC_URL_NOTE' => 'You just activated the SQL Rewriting option, you should now synchronize all your topics URLs by going to %sthis page%s if you did not already.
This will not change any of your current URLs
Please note :
You should only synchronize your topics URLs once you have fully set up your URL standard. It’s not a drama if you change your URL standard after your synchronized topic URLs, but you should do it again each time you do.
It’s not a drama either if you don’t, your topic URLs would in such case be updated upon each topic visit in case the topic URL would be empty or not matching your current standard.
', 229 | // phpBB SEO Class option 230 | 'url_rewrite' => 'Activate URL rewriting', 231 | 'url_rewrite_explain' => 'Once you have set up the below options, and generated your personalized .htaccess, you can activate URL rewriting and check if your rewritten URLs do work properly. If you get 404 errors, it’s most likely an .htaccess issue, try some of the .htaccess tool option to generate a new one.', 232 | 'modrtype' => 'URL rewriting type', 233 | 'modrtype_explain' => 'You have here the choice between three phpBB SEO mod rewrite types.
The Simple one,the Mixed one and the Advanced one.

Please Note :
Modifying this option will change all your URLs in your web site.
Doing it with an already indexed web site should thus be considered with as much care as when migrating and not too often.
So you’d better be decided to go for it or not.
Changing this option requires an .htaccess update.
', 234 | 'sql_rewrite' => 'Activate SQL Rewriting', 235 | 'sql_rewrite_explain' => 'This option will allow you to choose URL for each topic. You will be able to accurately set topic URL when posting new topic or when editing an existing one. This functionality is though limited to forum admins and moderators.

Please Note :
Turning on this option will not change topic URLs. Existing URLs will be stored as they are displayed in the data base. But it may not be the case if you turn it off after you started to use it. In such case, personalized URLs may be treated as if they weren’t.
The feature also has the great advantage to fasten the URL rewriting by a lot, especially when using the virtual folder option in advanced mode, and to make it a lot easier to retrieve rewritten URLs from any page.
', 236 | 'profile_inj' => 'Profiles and groups injection', 237 | 'profile_inj_explain' => 'You can here choose to inject nicknames, group names and user messages page (optional see below) in their URLs instead of the default static rewriting, phpBB/nickname-uxx.html instead of phpBB/memberxx.html.', 238 | 'profile_vfolder' => 'Virtual folder Profiles', 239 | 'profile_vfolder_explain' => 'You can here choose to simulate a folder structure for profiles and user messages page (optional see below) URLs, phpBB/nickname-uxx/(topics/) or phpBB/memberxx/(topics/) instead of phpBB/nickname-uxx(-topics).html and phpBB/memberxx(-topics).html.

Please Note
Profile ID removing will override this setting.
Changing this option requires an .htaccess update
', 240 | 'profile_noids' => 'Profiles ID removing', 241 | 'profile_noids_explain' => 'When Profiles and groups injection is activated, you can here choose to use example.com/phpBB/member/nickname instead of the default example.com/phpBB/nickname-uxx.html. phpBB Uses an extra, but light, SQL query on such pages without user id.

Please Note
Special characters won’t be handled the same by all browsers. FF always urlencodes (urlencode()), and it seems to use Latin1 first, when IE and Opera do not. For advanced urlencoding options, please read the install file.
Changing this option requires an .htaccess update
', 242 | 'rewrite_usermsg' => 'Common Search and User messages pages rewriting', 243 | 'rewrite_usermsg_explain' => 'This option mostly makes sense if you allow public access to both profiles and search pages.
Using this option most likely implies a greater use of the search functions and thus a heavier server load.
The URL rewriting type (with and without ID) follows the one set for profiles and groups.
phpBB/messages/nickname/topics/ VS phpBB/nickname-uxx-topics.html VS phpBB/memberxx-topics.html.
Additionally, this option will activate the common search page rewriting, such as active topics, unanswered and newposts pages.

Please Note :
ID removing on these links will imply the same limitation as per the user profiles.
Changing this option requires an .htaccess update
', 244 | 'rewrite_files' => 'Attachment Rewriting', 245 | 'rewrite_files_explain' => 'Activate phpBB Attachment Rewriting. Can be of a great help if you have many attached images worth being indexed. Files of course must be downloadable by bots for this to have a meaning SEO wise.

Please Note :
Make sure you have the required RewriteRule (# PHPBB FILES ALL MODES) in your .htaccess when you activate this option', 246 | 'rem_sid' => 'SID Removing', 247 | 'rem_sid_explain' => 'SID will be removed from 100% of the URLs passing through the phpbb_seo class, for guests thus bots.
This ensure bots won’t see any SID on forum, topic and post URLs, but visitors that do not accept cookies will most likely create more than one session.
The Zero duplicate http 301 redirect URL with SID for guests and bots by default.', 248 | 'rem_hilit' => 'Highlights Removing', 249 | 'rem_hilit_explain' => 'Highlights will be removed from 100% of the URLs passing through the phpbb_seo class, for guests thus bots.
This ensures bots won’t see any Highlights on forum, topic and post URLs.
The Zero duplicate will automatically follow this setting, eg http 301 redirect URL with highlights for guests and bots.', 250 | 'rem_small_words' => 'Remove small words', 251 | 'rem_small_words_explain' => 'Allow to remove all words of less than three letters in rewritten URLs.

Please Note
The filtering will change potentially a lot of URLs in your web site.
Even though the zero duplicate mod would take care of all the required redirecting when changing this option, starting to use it with an already indexed web site should thus be considered with as much care as when migrating and not too often.
So you’d better be decided to go for it or not.
', 252 | 'virtual_folder' => 'Virtual Folder', 253 | 'virtual_folder_explain' => 'Allow to add the forum URL as a virtual folder in topic URLs.

Example :
forum-title-fxx/topic-title-txx.html VS topic-title-txx.html for a topic URL.

Please Note
The Virtual folder injection option can change all your web site’s URLs almost too easily.
Starting to use it with an already indexed web site should thus be considered with as much care as when migrating and not too often.
So you’d better be decided to go for it or not.
Changing this option requires an .htaccess update.
', 254 | 'virtual_root' => 'Virtual Root', 255 | 'virtual_root_explain' => 'If phpBB is installed in a sub folder (example phpBB3/), you can simulate a root install for rewritten links.

Example :
phpBB3/forum-title-fxx/topic-title-txx.html VS forum-title-fxx/topic-title-txx.html for a topic URL.

This can be handy to shorten URLs a bit, especially if you are using the "Virtual Folder" feature. UnRewritten links will continue to appear and work in the phpBB folder.

Please Note :
Using this option requires you to use a home page for the forum index (like forum.html).
This option can change all your web site’s URLs almost too easily.
Starting to use it with an already indexed web site should thus be considered with as much care as when migrating and not too often.
So you’d better be decided to go for it or not.
Changing this option requires an .htaccess update.
', 256 | 'cache_layer' => 'Forum URL caching', 257 | 'cache_layer_explain' => 'Turns on the cache for forum URLs and allow to separate forum titles from their URL

Example :
forum-title-fxx/ VS any-title-fxx/ for a forum URL.

Please Note
This option will allow you to change your forum URL, thus potentially many topic URLS if you are using the Virtual Folder option.
The topic URLs will always be redirected properly with the Zero Duplicate.
It will as well be the case for forum URL as long as you keep the delimiter and IDs, see below.
', 258 | 'rem_ids' => 'Forum ID Removing', 259 | 'rem_ids_explain' => 'Get rid of the IDs and delimiters in forum URLs. Only apply if Forum URL caching is activated.

Example :
any-title-fxx/ VS any-title/ for a forum URL.

Please Note :
This option will allow you to change your forum URL, thus potentially many topic URLS if you are using the Virtual Folder option.
The topic URLs will always be redirected properly with the Zero Duplicate.
It will not always be the case with the forum URLs :
any-title-fxx/ will always be properly redirected with the Zero Duplicate but it won’t be the case if you edit any-title/ to something-else/.
In such a case, any-title/ will for now be treated as a forum that does not exist.
So you’d better be decided to go for it or not, but it can really be powerful SEO wise.
', 260 | 'redirect_404_forum' => 'Redirect forum 404s', 261 | 'redirect_404_forum_explain' => 'Redirect non existing forums to index with a 301 instead of issuing a 404 with the standard phpBB message.', 262 | 'redirect_404_topic' => 'Redirect topic 404s', 263 | 'redirect_404_topic_explain' => 'Redirect non existing topics adn posts to index with a 301 instead of issuing a 404 with the standard phpBB message.', 264 | // copyrights 265 | 'copyrights' => 'Copyrights', 266 | 'copyrights_img' => 'Link image', 267 | 'copyrights_img_explain' => 'You can here choose to display the phpBB SEO copyright link as an image or as a text links.', 268 | 'copyrights_txt' => 'Link text', 269 | 'copyrights_txt_explain' => 'You can here choose the text to be used as the phpBB SEO copyright link text anchor. Leave empty for defaults.', 270 | 'copyrights_title' => 'Link title', 271 | 'copyrights_title_explain' => 'You can here choose the text to be used as the phpBB SEO copyright link title. Leave empty for defaults.', 272 | // Zero duplicate 273 | // Options 274 | 'ACP_ZERO_DUPE_OFF' => 'Off', 275 | 'ACP_ZERO_DUPE_MSG' => 'Post', 276 | 'ACP_ZERO_DUPE_GUEST' => 'Guest', 277 | 'ACP_ZERO_DUPE_ALL' => 'All', 278 | 'zero_dupe' =>'Zero duplicate', 279 | 'zero_dupe_explain' => 'The following settings concerns the Zero duplicate, you can modify them upon your needs.
These do not imply any .htaccess update.', 280 | 'zero_dupe_on' => 'Activate the Zero duplicate', 281 | 'zero_dupe_on_explain' => 'Allow to activate and deactivate the Zero duplicate redirections.', 282 | 'zero_dupe_strict' => 'Strict Mode', 283 | 'zero_dupe_strict_explain' => 'When activated, the zero dupe will check if the requested URL exactly matches the one attended.
When set to no, the zero dupe will make sure the attended URL is the first part of the one requested.
The interest is to make it easier to deal with mods that could interfere with the zero dupe by adding GET vars.', 284 | 'zero_dupe_post_redir' => 'Posts Redirections', 285 | 'zero_dupe_post_redir_explain' => 'This option will determine how to handle post URLs; it can take four values :
 off, do not redirect post URL, whatever the case,
 post, only make sure postxx.html is used for a post URL,
 guest, redirect guests if required to the corresponding topic URL rather than to the postxx.html, and only make sure postxx.html is used for logged in users,
 all, redirect if required to the corresponding topic URL.

Please Note
Keeping the postxx.html URLs is harmless SEO wise as long as you keep the disallow on post URLs in your robots.txt.
Redirecting them all will most likely produce the most redirections among all.
If you redirect postxx.html in all cases, this means as well that a message that would be posted in a thread and then moved in another one will see its URL changing, which thanks to the zero duplicate mod is of no harm SEO wise, but the previous link to the post won’t link to it anymore in such a case.
.', 286 | // no duplicate 287 | 'no_dupe' => 'No duplicate', 288 | 'no_dupe_on' => 'Activate The No duplicate', 289 | 'no_dupe_on_explain' => 'The No duplicate mod replaces posts URLs with the corresponding Topic URL (with pagination).
It does not add any SQL, just a LEFT JOIN on a query already being performed. This could still mean a bit more work, but should not be a problem for server load.', 290 | )); 291 | 292 | $lang = array_merge($lang, array( 293 | 'ACP_CAT_PHPBB_SEO' => 'phpBB SEO', 294 | 'ACP_MOD_REWRITE' => 'URL Rewriting settings', 295 | 'ACP_PHPBB_SEO_CLASS' => 'phpBB SEO Class settings', 296 | 'ACP_FORUM_URL' => 'Forum URL Management', 297 | 'ACP_HTACCESS' => '.htaccess', 298 | 'ACP_SEO_EXTENDED' => 'Extended config', 299 | 'ACP_PREMOD_UPDATE' => '

Release announcement

300 |

This update does only concern the premod, not the phpBB core.

301 |

A new version of the phpBB SEO premod is thus available : %1$s
Make sure you visitthe release thread and update your installation.

', 302 | 'SEO_LOG_INSTALL_PHPBB_SEO' => 'phpBB SEO mod rewrite installed (v%s)', 303 | 'SEO_LOG_INSTALL_PHPBB_SEO_FAIL' => 'phpBB SEO mod rewrite install attempt failed
%s', 304 | 'SEO_LOG_UNINSTALL_PHPBB_SEO' => 'phpBB SEO mod rewrite uninstalled (v%s)', 305 | 'SEO_LOG_UNINSTALL_PHPBB_SEO_FAIL' => 'phpBB SEO mod rewrite uninstall attempts failed
%s', 306 | 'SEO_LOG_CONFIG_SETTINGS' => 'Altered phpBB SEO Class settings', 307 | 'SEO_LOG_CONFIG_FORUM_URL' => 'Altered Forum URLs', 308 | 'SEO_LOG_CONFIG_HTACCESS' => 'Generated new .htaccess', 309 | 'SEO_LOG_CONFIG_EXTENDED' => 'Altered phpBB SEO extended config', 310 | )); 311 | -------------------------------------------------------------------------------- /language/fr/acp_usu.php: -------------------------------------------------------------------------------- 1 | 'phpBB SEO', 40 | 'ACP_MOD_REWRITE' => 'Réécriture d’URL', 41 | // ACP phpbb seo class 42 | 'ACP_PHPBB_SEO_CLASS' => 'Configuration de la classe phpBB SEO', 43 | 'ACP_PHPBB_SEO_CLASS_EXPLAIN' => 'Vous pouvez régler ici différentes options du mod phpBB SEO %1$s (%2$s).
Les réglages par défaut comme les délimiteurs et les extensions doivent toujours être configurés dans le fichier phpBB/ext/phpbbseo/usu/customise.php, les modifier implique un changement de .htaccess ainsi que des redirections appropriées.%3$s', 44 | 'ACP_PHPBB_SEO_VERSION' => 'Version', 45 | 'ACP_PHPBB_SEO_MODE' => 'Mode', 46 | 'ACP_SEO_SUPPORT_FORUM' => 'Forum de support', 47 | // ACP forum urls 48 | 'ACP_FORUM_URL' => 'Configuration des URLs des forums', 49 | 'ACP_FORUM_URL_EXPLAIN' => 'Vous pouvez régler ici le contenu du cache, qui sera injecté dans les URLs des forums.
Les forums en vert sont en cache, ceux en rouge ne le sont pas encore.

Nota Bene :
mots-cles-fxx/ sera toujours convenablement redirigé par le Zéro Duplicate, mais pas si vous le modifiez par la suite : mots-cles/ ne sera pas directement redirigé vers autres-mots-cles/.
Dans ce cas, mots-cles/ sera considéré comme un forum qui n’existe pas, à défaut de redirections personnalisées.

', 50 | 'ACP_NO_FORUM_URL' => 'La configuration des URLs des forums est désactivée
La configuration des URLs des forums est uniquemant possible en mode Avancé ou Intermédiaire et lorsque le Cache des URLs des forums est activé.
Les URLs éventuellement configurées continuent cependant d’être utilisées en mode Avancé ou Intermédiaire.', 51 | // ACP .htaccess 52 | 'ACP_REWRITE_CONF' => 'Config Serveur', 53 | 'ACP_REWRITE_CONF_EXPLAIN' => 'Cet outil vous aidera à construire votre config serveur.
La version proposée ci-dessous prend en compte les réglages du fichier phpBB/ext/phpbbseo/usu/customise.php.
Vous pouvez modifier les valeurs des tableaux $seo_ext et $seo_static et personnaliser vos URLs avant de générer une config serveur.
Vous pouvez par exemple choisir d’utiliser .htm au lieu de .html, ’message’ au lieu de ’post’, ’mon-equipe’ au lieu de ’equipe’ etc ...
Si vous modifiez ces valeurs après que vos pages aient été indexées, vous aurez besoin de redirections personnalisées.
Les réglages par défaut ne sont pas du tout mauvais, vous pouvez sauter la première étape de personnalisation sans soucis si vous préférez.', 54 | 'SEO_SERVER_CONF_RBASE' => 'Portée de la config serveur', 55 | 'SEO_SERVER_CONF_RBASE_EXPLAIN' => 'La configuration du serveur peut être limitée au dossier physique de phpBB. Il est en générale préférable de limiter la portée de la config à l’endroit ou elle est utilisée, mais il peut être plus pratique de tout regrouper sur la racine du serveur.', 56 | 'SEO_SERVER_CONF_SLASH' => 'Slash droit RegEx', 57 | 'SEO_SERVER_CONF_SLASH_EXPLAIN' => 'En fonction de votre hébergeur, il se peut que vous ayez à retirer les slashes ("/") se trouvant devant la partie droite des RewriteRule. Ce slash particulier est par exemple utilisé par défaut pour Apache quand le .htaccess est instalé à la racine du domaine, et c’est le contraire quand phpBB est installé dans un sous dossier et que vous souhaitez mettre le .htaccess dans celui-ci.
Les réglages par défaut fonctionneront le plus souvent, si ce n’est pas le cas, essayez de générer une config serveur avec cette option.', 58 | 'SEO_SERVER_CONF_WSLASH' => 'Slash gauche RegEx', 59 | 'SEO_SERVER_CONF_WSLASH_EXPLAIN' => 'En fonction de votre hébergeur, il se peut que vous ayez à ajouter des slashes ("/") se trouvant devant la partie gauche des RewriteRule. Ce slash particulier par exemple pas utilisé par défaut par Apache, mais l’est par Ngix.
Les réglages par défaut fonctionneront le plus souvent, si ce n’est pas le cas, essayez de générer une config serveur avec cette option.', 60 | 'SEO_MORE_OPTION' => 'Plus d’options', 61 | 'SEO_MORE_OPTION_EXPLAIN' => 'Si le premier .htaccess suggéré ne fonctionne pas :
Assurez vous tout d’abord que le mod_rewrite est bien activé sur votre serveur.
Ensuite assurez vous d’avoir bien mis le .htaccess au bon endroit, et qu’il n’est pas perturbé par un autre se trouvant dans un autre dossier.
Si ça ne suffit pas, activez cette option et validez pour découvrir plus d’options.', 62 | 'SEO_SERVER_CONF_SAVE' => 'Sauvegarder la config serveur', 63 | 'SEO_SERVER_CONF_SAVE_EXPLAIN' => 'Si vous cochez l’option, des fichiers contenant la config serveur seront générés dans le dossier phpbb_seo/cache/. Ils sont prêt à l’emploi et prennent en compte vos réglages actuels. Vous devrez simplement déplacer/copier le fichier correspondant à votre servuer (Apache .htaccess, config Ngix ...) au bon endroit.', 64 | 'SEO_HTACCESS_ROOT_MSG' => 'Une fois prêt, vous pouvez sélectionner le code ci-dessous et le copier dans un fichier .htaccess vide ou utiliser l’option "Sauvegarder le .htaccess" ci-dessous.
Ce .htaccess est fait pour être utilisé à la racine du domaine, ce qui dans votre cas signifie le dossier de votre ftp qui correspond à %1$s.

Vous pouvez générer un .htaccess fait pour être utilisé dans le sous-dossier éventuel de phpBB en utilisant l’option "Emplacement du .htaccess" ci-dessous.', 65 | 'SEO_HTACCESS_FOLDER_MSG' => 'Une fois prêt, sélectionnez le code ci-dessous et copiez le dans un fichier .htaccess vide ou utilisez l’option "Sauvegarder le .htaccess" ci dessus.
Ce .htaccess est fait pour être utilisé dans le dossier utilisé par phpBB, ce qui dans votre cas signifie le dossier de votre ftp qui correspond à %1$s.', 66 | 'SEO_SERVER_CONF_CAPTION' => 'Légende', 67 | 'SEO_SERVER_CONF_CAPTION_COMMENT' => 'Commentaires', 68 | 'SEO_SERVER_CONF_CAPTION_STATIC' => 'Parties statiques, modifiables dans phpBB/ext/phpbbseo/usu/customise.php', 69 | 'SEO_SERVER_CONF_CAPTION_SUFFIX' => 'Extensions, modifiables dans phpBB/ext/phpbbseo/usu/customise.php', 70 | 'SEO_SERVER_CONF_CAPTION_DELIM' => 'Délimiteurs, modifiables dans phpBB/ext/phpbbseo/usu/customise.php', 71 | 'SEO_SERVER_CONF_CAPTION_SLASH' => 'Slashes Optionnels', 72 | 'SEO_SLASH_DEFAULT' => 'Défaut', 73 | 'SEO_SLASH_ALT' => 'Alternative', 74 | 'SEO_MOD_TYPE_ER' => 'Le type de mod rewrite n’est pas convenablement configuré dans phpBB/ext/phpbbseo/usu/customise.php', 75 | 'SEO_SHOW' => 'Montrer', 76 | 'SEO_HIDE' => 'Cacher', 77 | 'SEO_SELECT_ALL' => 'Sélectionner', 78 | 'SEO_APACHE_CONF' => 'Config Apache', 79 | //Ngix 80 | 'SEO_NGIX_CONF' => 'Config Ngix', 81 | 'SEO_NGIX_CONF_EXPLAIN' => 'Copiez / collez ce code this dans la configuration du serveur web et redemarrez Ngix.', 82 | // ACP extended 83 | 'ACP_SEO_EXTENDED_EXPLAIN' => 'Configuration additionnelle des mods phpBB SEO.', 84 | // External links 85 | 'SEO_EXTERNAL_LINKS' => 'Liens externes', 86 | 'SEO_EXTERNAL_LINKS_EXPLAIN' => 'Activer ou non l’ouverture des liens externes dans une nouvelle fenêtre du navigateur', 87 | 'SEO_EXTERNAL_SUBDOMAIN' => 'Liens externes sous-domaine', 88 | 'SEO_EXTERNAL_SUBDOMAIN_EXPLAIN' => 'Considerer ou non les liens vers d’autres sous domaines du domaine de votre forum comme des liens internes à ne pas ouvrir dans une nouvelle fenêtre', 89 | 'SEO_EXTERNAL_CLASSES' => 'Classe css externe', 90 | 'SEO_EXTERNAL_CLASSES_EXPLAIN' => 'Vous pouvez définir des classes css qui activeront l’ouverture dans une nouvelle fenêtre pour les liens. Liste de classes séparées par des virgules, exemple : postlink,external', 91 | // Titles 92 | 'SEO_PAGE_TITLES' => 'Titre des pages', 93 | 'SEO_APPEND_SITENAME' => 'Ajouter le nom du site au titres des pages', 94 | 'SEO_APPEND_SITENAME_EXPLAIN' => 'Ajouter, ou non, le nom du site à la fin du titres des pages.
Attention :
Cette option nécéssite que vous ayez convenablement modifié tous vos overall_header.html pour le mod Optimal titles, le nom du site pourrait si non apparaitre deux fois dans le titres de pages', 95 | // Meta 96 | 'SEO_META' => 'Méta tags', 97 | 'SEO_META_TITLE' => 'Méta title', 98 | 'SEO_META_TITLE_EXPLAIN' => 'Titre méta par défaut, utilisé sur les pages n’ayant pas de titre défini. Désactive le méta title si vide', 99 | 'SEO_META_DESC' => 'Méta description', 100 | 'SEO_META_DESC_EXPLAIN' => 'Description méta par défaut, utilisé sur les pages n’ayant pas de description définie', 101 | 'SEO_META_DESC_LIMIT' => 'Limite Méta description', 102 | 'SEO_META_DESC_LIMIT_EXPLAIN' => 'Limite en nombre de mots pour les méta description', 103 | 'SEO_META_BBCODE_FILTER' => 'Filtre Bbcodes', 104 | 'SEO_META_BBCODE_FILTER_EXPLAIN' => 'Liste de bbcodes, séparées par des virgules, qui seront totallement filtrés dans les méta tags. Les autre seront simplement désactivé et leur contenu pourra apparaitre.
Les bbcodes filtrés par défaut sont : img,url,flash,code.
Attention :
Ne pas filtrer les bbcodes img, url et flash n’est pas un bonne idée pour vos métas, de même que le bbcode code dans la plupart des cas. Dans le cas général, ne conservez le contenu des bbcodes qui en ont', 105 | 'SEO_META_KEYWORDS' => 'Méta keywords', 106 | 'SEO_META_KEYWORDS_EXPLAIN' => 'Mot clés méta par défaut, utilisés sur les pages n’ayant pas de description / mot clés définis. Entrez une liste de mot clés séparés par des espaces', 107 | 'SEO_META_KEYWORDS_LIMIT' => 'Limite Méta keywords', 108 | 'SEO_META_KEYWORDS_LIMIT_EXPLAIN' => 'Limite en nombre de mots pour les méta keywords', 109 | 'SEO_META_MIN_LEN' => 'Filtre mots courts', 110 | 'SEO_META_MIN_LEN_EXPLAIN' => 'Nombre de lettres limite pour la prise en compte des mots cléfs, seul les mots composés de plus de lettre que cette valeur seront pris en compte', 111 | 'SEO_META_CHECK_IGNORE' => 'Filtre mots ignorés', 112 | 'SEO_META_CHECK_IGNORE_EXPLAIN' => 'Exclure, ou non, les mots du fichier search_ignore_words.php des méta keywords', 113 | 'SEO_META_LANG' => 'Méta langue', 114 | 'SEO_META_LANG_EXPLAIN' => 'Code langue utilisé dans les méta tags', 115 | 'SEO_META_COPY' => 'Méta copyright', 116 | 'SEO_META_COPY_EXPLAIN' => 'Copyright utilisé dans les méta tags. Désactive le méta copyritght si vide', 117 | 'SEO_META_FILE_FILTER' => 'Filtre fichiers', 118 | 'SEO_META_FILE_FILTER_EXPLAIN' => 'Liste de noms de fichiers php sans extensions séparés par des virgules ne devant pas être indéxés (robots:noindex,follow). Exemple : ucp,mcp', 119 | 'SEO_META_GET_FILTER' => 'Filtre _GET', 120 | 'SEO_META_GET_FILTER_EXPLAIN' => 'Liste de variable _GET séparées par des virgules ne devant pas être indéxées (robots:noindex,follow). Exemple : style,hilit,sid', 121 | 'SEO_META_ROBOTS' => 'Méta Robots', 122 | 'SEO_META_ROBOTS_EXPLAIN' => 'La balise Méta Robots indique aux bots des moteur de recherche comment indexer les pages de votre site. Elle est réglée sur "index,follow" par défaut, ce qui autorise les moteurs de recherche à indexer et mettre en cache les pages et à suivre les liens qui s’y trouvent. Désactive la balise si vide.
Attention :
Cette balise est sensible, si vous mettez "noindex", aucune page ne sera référencée', 123 | 'SEO_META_NOARCHIVE' => 'Méta Robots Noarchive', 124 | 'SEO_META_NOARCHIVE_EXPLAIN' => 'La balise Méta Robots Noarchive indique aux moteurs de recherche s’ils doivent ou non mettre les pages en cache. Cette option ne concerne que la mise en cache des pages, elle est sans rapports avec l’indexation et le positionnement des pages.
Vous pouvez ici choisir les forums qui auront l’option "noarchive" ajoutée à leur balise méta robots en cours.
C’est par exemple très pratique si certains de vos forums sont ouverts aux robots sans être ouverts aux invités. Vous pourrez dans ce cas utiliser l’option noarchive pour ceux-ci, afin qu’ils apparaissent dans les résultats des moteurs de recherches sans que les invités puissent voir le contenu des pages sans s’inscrire via le cache des moteurs de recherches', 125 | 'SEO_META_OG' => 'Open Graph', 126 | 'SEO_META_OG_EXPLAIN' => 'Activer Open Graph tags pour permettre au Crawler Facebook de generer des prévisualisations quand votre contenu est partagé sur Facebook.', 127 | 'SEO_META_FB_APP_ID' => 'App ID Facebook', 128 | 'SEO_META_FB_APP_ID_EXPLAIN' => 'L’ID unique permettant à Facebook de reconnaitre votre site. Cette ID est cruciale pour le fonctionnement de Facebook Insights.', 129 | // Install 130 | 'SEO_INSTALL_PANEL' => 'Installation phpBB SEO', 131 | 'SEO_ERROR_INSTALL' => 'Une erreur est survenue lore de l’installation. Il est plus prudent de désinstaller une fois avant de rééssayer.', 132 | 'SEO_ERROR_INSTALLED' => 'Le module %s est déjà installé', 133 | 'SEO_ERROR_ID' => 'Le module %s n’a pas d’ID.', 134 | 'SEO_ERROR_UNINSTALLED' => 'Le module %s est déjà désinstallé', 135 | 'SEO_ERROR_INFO' => 'Information :', 136 | 'SEO_FINAL_INSTALL_PHPBB_SEO' => 'Aller à l’ACP', 137 | 'SEO_FINAL_UNINSTALL_PHPBB_SEO' => 'Retour à l’index du forum', 138 | 'CAT_INSTALL_PHPBB_SEO' => 'Installation', 139 | 'CAT_UNINSTALL_PHPBB_SEO'=> 'Désinstallation', 140 | 'SEO_OVERVIEW_TITLE' => 'Vue d’ensemble du mod rewrite phpBB SEO Ultimate SEO URL', 141 | 'SEO_OVERVIEW_BODY' => 'Bienvenue sur notre Release publique du mod rewrite phpBB3 SEO %1$s %2$s.

Veuillez lire le sujet de mise à disposition pour plus de détails.

Note: Vous devez avoir effectué les changements de code des fichiers et uploadé tous les nouveaux fichiers avant de continuer avec cet installeur.

Cet installeur vous guidera pendant le processus d’installation du module d’administration du mod rewrite phpBB3 SEO. Ce module vous permettra de choisir précisément vos URLs réécrites pour les meilleurs résultats dans les moteurs de recherche.

.', 142 | 'CAT_SEO_PREMOD' => 'Premod phpBB SEO', 143 | 'SEO_PREMOD_TITLE' => 'Vue d’ensemble de la premod phpBB SEO', 144 | 'SEO_PREMOD_BODY' => 'Bienvenue sur notre Release publique de la premod phpBB SEO.

Veuillez lire le sujet de mise à disposition pour plus de détails.

Note: Vous allez pouvoir choisir entre les trois différents types de réécriture d’URLs pour phpBB3 de phpBB SEO.

Les différents types de réécritures disponibles :

Ce choix est crucial, nous vous invitons à prendre le temps de vous familiariser avec cette premod avant de vous lancer.
Cette premod est simple d’utilisation et d’installation, il vous suffit de suivre le processus normal d’installation de phpBB.

145 |

Pré-requis pour la réécriture d’URLs:

146 |
    147 |
  • Serveur Apache (linux OS) avec le module mod_rewrite.
  • 148 |
  • Serveur IIS (windows OS) avec le module isapi_rewrite, vous devrez cependant modifier les rewriterules pour votre httpd.ini
  • 149 |
150 |

Une fois l’installation effectuée, vous devrez vous rendre dans l’ACP de phpBB pour configurer et activer la réécriture d’URLs.

', 151 | 'SEO_LICENCE_TITLE' => 'RECIPROCAL PUBLIC LICENSE', 152 | 'SEO_LICENCE_BODY' => 'Les mod rewrites phpBB SEO sont diffusés sous la licence RPL qui indique que vous ne devez pas retirer les crédits phpBB SEO
Pour plus de détails concernant les exceptions possibles, merci de contacter un administrateur de phpBB SEO (Prioritairement SeO ou dcz).', 153 | 'SEO_PREMOD_LICENCE' => 'Les mod rewrites phpBB SEO et le Zéro Duplicate inclus dans cette premod sont diffusés sous la licence RPL qui indique que vous ne devez pas retirer les crédits phpBB SEO
Pour plus de détails concernant les exceptions possibles, merci de contacter un administrateur de phpBB SEO (Prioritairement SeO ou dcz).', 154 | 'SEO_SUPPORT_TITLE' => 'Support', 155 | 'SEO_SUPPORT_BODY' => 'Un support complet sera offert sur le forum Réécriture URL %2$s. Nous fournirons des réponses aux questions générales, aux problèmes de configuration, et aux problèmes courants.

Prenez cette occasion de visiter notre Forum d’optimisation du référencement.

Vous devriez vous inscrire, vous enregistrer et suivre le sujet de mise à disposition pour être tenu au courant des mises à jours par mail.', 156 | 'SEO_PREMOD_SUPPORT_BODY' => 'Un support complet sera offert sur le forum Premod phpBB SEO. Nous fournirons des réponses aux questions générales, aux problèmes de configuration, et aux problèmes courants.

Prenez cette occasion de visiter notre Forum d’optimisation du référencement.

Vous devriez vous inscrire, vous enregistrer et suivre le sujet de mise à disposition pour être tenu au courant des mises à jours par mail.', 157 | 'SEO_INSTALL_INTRO' => 'Bienvenue sur l’installeur phpBB SEO', 158 | 'SEO_INSTALL_INTRO_BODY' => '

Vous êtes sur le point d’installer le mod rewrite phpBB SEO %1$s %2$s. Cet outil va activer le module d’administration du mod dans l’ACP de phpBB.

Une fois l’installation effectuée, vous devrez vous rendre dans l’ACP de phpBB pour configurer et activer la réécriture d’URLs.

159 |

Note: Si c’est votre première utilisation, nous vous conseillons de prendre le temps de tester ce mod sur un serveur local ou privé pour vous familiariser avec les nombreux standards de réécriture d’URLs pris en charge par le mod. De cette façon, vous ne montrerez pas des URLs différentes aux moteurs de recherches tous les deux jours pendant vos réglages. Et vous ne découvrirez pas un mois après installation que vous pouviez utiliser un meilleur standard d’URLs pour votre forum. Le patience est d’or pour le référencement, et même si le Zéro Duplicate rend les redirection HTTP 301 très faciles, vous ne voulez pas rediriger toutes vos URLs trop souvent.


160 |

Prés-requis :

161 |
    162 |
  • Serveur Apache (linux OS) avec le module mod_rewrite.
  • 163 |
  • Serveur IIS (windows OS) avec le module isapi_rewrite, vous devrez cependant modifier les rewriterules pour votre httpd.ini
  • 164 |
', 165 | 'SEO_INSTALL' => 'Installation', 166 | 'UN_SEO_INSTALL_INTRO' => 'Bienvenue sur le désintalleur phpBB SEO', 167 | 'UN_SEO_INSTALL_INTRO_BODY' => '

Vous êtes sur le point de désintaller le module d’administration du mod rewrite phpBB SEO%1$s %2$s.

168 |

Note: Cette opération ne désactivera pas la réécriture d’URLs sur votre forum tant que les fichiers de phpBB ne seront pas modifiés.

', 169 | 'UN_SEO_INSTALL' => 'Désinstallation', 170 | 'SEO_INSTALL_CONGRATS' => 'Félicitations !', 171 | 'SEO_INSTALL_CONGRATS_EXPLAIN' => '

Vous avez correctement installé le mod rewrite phpBB3 SEO %1$s %2$s. Vous devriez maintenant vous rendre dans l’ACP de phpBB pour configurer et activer la réécriture d’URLs.

172 |

Dans la nouvelle catégorie phpBB SEO, vous pourrez :

173 |

Configurer et activer la réécriture d’URLs

174 |

Prenez votre temps, c’est là que vous allez choisir à quoi vos URLs ressembleront. Les options du Zéro Duplicate apparaitront dans le même menu une fois installé.

175 |

Gérer précisément les URLs de vos forums

176 |

Vous pourrez, en mode Intermédiaire et Avancé, dissocier les URLs des forums de leurs titres réels et utiliser les mots clés que vous souhaitez dans celles-ci

177 |

Générer un .htaccess personnalisé

178 |

Une fois que vous aurez procédé aux réglages ci dessus, vous pourrez utiliser une interface simple pour générer votre .htaccess personnalisé et l’enregistrer sur votre serveur.

', 179 | 'UN_SEO_INSTALL_CONGRATS' => 'Le module d’administration phpBB SEO à été désinstallé.', 180 | 'UN_SEO_INSTALL_CONGRATS_EXPLAIN' => '

Vous avez correctement désinstallé le mod rewrite phpBB3 SEO %1$s %2$s.

181 |

Cette opération ne désactivera pas la réécriture d’URLs sur votre forum tant que les fichiers de phpBB ne seront pas modifiés.

', 182 | 'SEO_VALIDATE_INFO' => 'Validation :', 183 | 'SEO_SQL_ERROR' => 'Erreur lors de la requête SQL', 184 | 'SEO_SQL_TRY_MANUALLY' => 'L’utilisateur SQL semble ne pas avoir les droit suffisant pour effectuer la requête nécéssaire, veuillez la lancer manuellement (phpMyadmin) :', 185 | // Security 186 | 'SEO_LOGIN' => 'Vous devez être enregistré pour pouvoir accéder à cette page.', 187 | 'SEO_LOGIN_ADMIN' => 'Vous devez être enregistré en tant qu’administrateur pour pouvoir accéder à cette page.
Votre session à été détruite pour des raisons de sécurité.', 188 | 'SEO_LOGIN_FOUNDER' => 'Vous devez être enregistré en tant que fondateur pour pouvoir accéder à cette page.', 189 | 'SEO_LOGIN_SESSION' => 'La vérification de session a échoué.
Aucune modification prise en compte.
Votre session à été détruite pour des raisons de sécurité.', 190 | // Cache status 191 | 'SEO_CACHE_FILE_TITLE' => 'Statut du cache', 192 | 'SEO_CACHE_STATUS' => 'Le dossier du cache configuré est : %s', 193 | 'SEO_CACHE_FOUND' => 'Le dossier cache a bien été trouvé.', 194 | 'SEO_CACHE_NOT_FOUND' => 'Le dossier cache n’a pas été trouvé.', 195 | 'SEO_CACHE_WRITABLE' => 'Le dossier cache est utilisable.', 196 | 'SEO_CACHE_UNWRITABLE' => 'Le dossier cache n’est pas utilisable. Vous devez configurer son CHMOD sur 0777.', 197 | 'SEO_CACHE_INNER_UNWRITABLE' => 'Les fichiers se trouvant dans le dossier cache ne sont pas utilisables. Assurez vous de configurer le bon CHMOD pour le dossier cache ET les fichiers qui s’y trouvent.', 198 | 'SEO_CACHE_FORUM_NAME' => 'Nom du forum', 199 | 'SEO_CACHE_URL_OK' => 'URL en cache', 200 | 'SEO_CACHE_URL_NOT_OK' => 'URL pas en cache', 201 | 'SEO_CACHE_URL' => 'URL finale', 202 | 'SEO_CACHE_MSG_OK' => 'Le fichier cache a bien été mis à jour.', 203 | 'SEO_CACHE_MSG_FAIL' => 'Un erreur s’est produite lors de la mise à jour du cache.', 204 | 'SEO_CACHE_UPDATE_FAIL' => 'L’URL que vous avez soumise ne peut être utilisée, le cache n’a pas été modifié.', 205 | // Seo advices 206 | 'SEO_ADVICE_DUPE' => 'Un duplicata de ce titre a été détecté pour une URL de forum : %1$s.
Vous devez utiliser un titre et une URL unique pour chaque forum.', 207 | 'SEO_ADVICE_RESERVED' => 'Une URL réservée (utilisée par les posts, les profils ou les parties statiques des autres urls) a été détectée dans l’url du forum : %1$s.
Son URL est restée inchangée.', 208 | 'SEO_ADVICE_LENGTH' => 'L’URL en cache est un peu trop longue.
Vous devriez en utiliser une plus courte.', 209 | 'SEO_ADVICE_DELIM' => 'L’URL en cache utilise le délimiteur et l’ID du forum.
Vous devriez en utiliser une sans.', 210 | 'SEO_ADVICE_WORDS' => 'L’URL en cache contient un peu trop de mots.
Vous devriez en utiliser une meilleur.', 211 | 'SEO_ADVICE_DEFAULT' => 'L’URL finale, après formatage est celle par défaut.
Vous devriez en utiliser une autre.', 212 | 'SEO_ADVICE_START' => 'Les URLs soumises ne peuvent pas se terminer par un paramètre de pagination.
Il a donc été retiré.', 213 | 'SEO_ADVICE_DELIM_REM' => 'Les URLs soumises ne peuvent pas se terminer par un délimiteur de forum.
Il a donc été retiré.', 214 | // Mod Rewrite type 215 | 'ACP_SEO_SIMPLE' => 'Simple', 216 | 'ACP_SEO_MIXED' => 'Intermédiaire', 217 | 'ACP_SEO_ADVANCED' => 'Avancé', 218 | 'ACP_ULTIMATE_SEO_URL' => 'Ultimate SEO URL', 219 | // URL Sync 220 | 'SYNC_REQ_SQL_REW' => 'Vous devez activer le stockage d’URLs dans la base de données pour utiliser ce script!', 221 | 'SYNC_TITLE' => 'Synchronisation des URLs', 222 | 'SYNC_WARN' => 'Attention, veuillez ne pas interrompre le script avant qu’il ait finit, et faites une sauvegarde de votre base de données avant de l’utiliser!', 223 | 'SYNC_COMPLETE' => 'Synchronisation effectuée !', 224 | 'SYNC_RESET_COMPLETE' => 'Réinitialisation effectuée !', 225 | 'SYNC_PROCESSING' => 'Synchronisation en cours, veuillez patienter ...

%1$s%% ont été traité.
%2$s éléments on été traités.
%3$s éléments en tout, %4$s sont traités à la fois.
Vitesse : %5$s éléments/s.
Temps écoulé pour ce cycle : %6$ss
Temps restant estimé : %7$s minute(s)', 226 | 'SYNC_ITEM_UPDATED' => '%1$s éléments on été mise à jour', 227 | 'SYNC_TOPIC_URLS' => 'Lancer la synchronisation des URL des sujets', 228 | 'SYNC_RESET_TOPIC_URLS' => 'Réinitialiser toutes les URL de sujets', 229 | 'SYNC_TOPIC_URL_NOTE' => 'Vous venez d’activer le stockage d’URLs dans la base de données, vous devriez maintenant synchroniser vos URLs de sujets en vous rendant sur %scette page%s si vous ne l’avez pas déjà fait.
Cela ne modifiera pas vos URLs actuelles.
Nota Bene :
Vous devriez synchroniser vos URLs uniquement si vous avez tout à fait défini votre standard d’URL. Ce n’est pas un drame si vous modifiez votre standard après avoir synchronisé vos URLs de sujets, vous devrez simplement le refaire a chaque modification de celui-ci.
Ce n’est pas un drame non plus si vous ne le faites pas, vos URLs de sujets seraient alors mise à jour au cas par cas et à chaque visite d’un sujet dont l’URL ne serait pas a jour (vide ou non conforme à vos réglages).
', 230 | // phpBB SEO Class option 231 | 'url_rewrite' => 'Activer la réécriture d’URLs', 232 | 'url_rewrite_explain' => 'Une fois que vous aurez configuré les options ci-dessous, et généré votre .htaccess personnalisé, vous pouvez activer la réécriture d’URLs et vérifier que vos nouvelles URLs fonctionnent correctement. Si vous rencontrez des erreurs 404, c’est pratiquement à coup sûr lié au .htaccess, essayez alors les options du générateur de .htaccess pour en tester un nouveau.', 233 | 'modrtype' => 'Type de réécriture d’URLs', 234 | 'modrtype_explain' => 'Vous avez le choix entre trois standards de réécriture d’URLs.
Les trois types de réécriture d’URLs sont : Le mode Simple, le mode Intermédiaire et le mode Avancé.

Nota Bene :
Modifier cette option va changer toutes les URLs de votre site presque trop facilement.
Si vous la modifiez sur un site déjà convenablement indexé, l’opération doit être réalisée avec autant de soins et de réflexion préalable que s’il s’agissait d’une migration et pas trop souvent.
La modification de cette option requiert une mise à jour de votre .htaccess.
', 235 | 'sql_rewrite' => 'SQL Rewriting', 236 | 'sql_rewrite_explain' => 'Permet d’activer les url personnalisées pour les sujets. Vous pourrez alors choisir une url précise pour chaque sujet, soit au moment de le créer, soit en éditant simplement celui-ci. Cette possibilité est toutefois réservée aux administrateurs et modérateurs du forum.

Nota Bene :
L’activation de cette option est sans conséquence sur vos url existantes, elles seront stockées telles qu’elles dans la base de donnée. Cependant, cela ne pourrait plus être le cas si vous désactivez l’option après l’avoir utilisée. Les URLs qui auraient été personnalisées pourraient alors de nouveau être traités comme si elle ne l’étaient pas.
L’option a également le mérite de rendre beaucoup plus rapide la réécriture, principalement en mode avancé avec dossier virtuels, et de permettre une récupération bien plus simple des url récrites depuis n’importe quelle page.
', 237 | 'profile_inj' => 'Injection profils et groupes', 238 | 'profile_inj_explain' => 'Vous pouvez choisir d’utiliser les pseudos, les noms de groupes ainsi que les pages des messages des membres (optionel voir plus bas) dans leurs URLs respectives au lieu de la réécriture statique par défaut, phpBB/pseudo-uxx.html au lieu de phpBB/membrexx.html.', 239 | 'profile_vfolder' => 'Dossiers virtuels pour les profils', 240 | 'profile_vfolder_explain' => 'Vous pouvez simuler une structure en dossiers virtuels pour les profils et les pages des messages des membres (optionel voir plus bas), phpBB/pseudo-uxx/(topics/) ou phpBB/membrexx/(topics/) au lieu de phpBB/pseudo-uxx(-topics).html et phpBB/membrexx(-topics).html.

Nota Bene :
L’option "Profiles sans ID" impose cette option.
La modification de cette option requiert une mise à jour de votre .htaccess.
', 241 | 'profile_noids' => 'Profiles sans ID', 242 | 'profile_noids_explain' => 'Quand l’injection des profils et groupes est activée, vous pouvez utiliser phpBB/membre/pseudo au lieu de phpBB/pseudo-uxx.html. phpBB utilise une requête SQL supplémentaire, mais légère, lors du chargement de ces pages sans ID de membre.

Nota Bene :
Les caractères spéciaux des pseudos ne sont pas pris en charge de la même manière par tous les navigateurs, FF forcera toujours l’urlencodage (urlencode()), et apparemment en Latin1 prioritairement, à contrario de IE et Opéra. Pour les options d’urlencodage avancées, reportez vous au fichier d’installation.
La modification de cette option requiert une mise à jour de votre .htaccess.
', 243 | 'rewrite_usermsg' => 'Réécriture Messages des membres et recherches communes', 244 | 'rewrite_usermsg_explain' => 'Cette option n’a vraiment de sens que si vous laissez les profils et les recherches publiquement accessible.
Activer cette option implique vraisemblablement une utilisation plus intense de la recherche et donc potentiellement une hausse de la charge serveur.
Le type d’injection (avec et sans ID) reprend celui des des profils et groupes.
phpBB/membre/pseudo/topics/ VS phpBB/pseudo-uxx-topics.html VS phpBB/membrexx-topics.html.
Cette option utilise une requête SQL supplémentaire sur les pages des messages de membres.
Elle active également la réécriture des recherches communes comme "sujets récents", "sujets sans réponses" et "nouveaux messages".

Nota Bene :
Le retrait d’ID sur ces pages pose les mêmes problèmes que dans les cas des pages de profils.
La modification de cette option requiert une mise à jour de votre .htaccess.
', 245 | 'rewrite_files' => 'Réécriture des fichiers joints', 246 | 'rewrite_files_explain' => 'Activer la réécriture des fichiers joints. Cette option est très utile si vous avez un certain nombre d’images qui mériterait d’être indexées. Les fichiers joints doivent évidemment être téléchargeable par les robots pour que cette option ait un intérêt.

Nota Bene :
Assurez vous d’avoir la RewriteRule nécessaire (# PHPBB FILES ALL MODES) dans votre .htaccess lorsque vous activez cette option.', 247 | 'rem_sid' => 'Retrait des SID', 248 | 'rem_sid_explain' => 'Les SID seront retirés pour 100% des URLs passées par la réécriture, pour les invités et donc les bots.
Cela nous assure que les bots ne verront pas de SID sur les URLs de forums, sujets et messages, mais les visiteurs n’acceptant pas les cookies auront des chances de créer plus d’une session.
Les SIDs sont toujours retirés pour les invités et robots par le Zéro Duplicate.', 249 | 'rem_hilit' => 'Retrait des Highlights', 250 | 'rem_hilit_explain' => 'Les Highlights seront retirées pour 100% des URLs passées par la réécriture, pour les invités et donc les bots.
Cela nous assure que les bots ne verront pas de Highlights sur les URLs de forums, sujets et messages.
Le Zéro Duplicate suivra ce réglage, en redirigeant les URLs avec des highlights pour les invités et les bots.', 251 | 'rem_small_words' => 'Filtre des mots courts', 252 | 'rem_small_words_explain' => 'Vous permet de ne pas injecter les mots de moins de 3 lettres dans les URLs.

Nota Bene :
L’activation de ces filtres peut changer un grand nombre d’URLs de votre site.
Si vous l’activez sur un site déjà convenablement indexé, l’opération doit être réalisée avec autant de soins et de réflexion préalable que s’il s’agissait d’une migration et pas trop souvent.
', 253 | 'virtual_folder' => 'Dossiers Virtuels', 254 | 'virtual_folder_explain' => 'Vous permet d’utiliser les forums comme des dossiers virtuels dans les URLs des sujets.

Exemple :
titre-forum-fxx/titre-sujet-txx.html VS titre-sujet-txx.htmlpour une URL de sujet.

Nota Bene :
L’utilisation des dossiers virtuels peut changer un grand nombre d’URLs de votre site presque trop facilement.
Si vous l’activez sur un site déjà convenablement indexé, l’opération doit être réalisée avec autant de soins et de réflexion préalable que s’il s’agissait d’une migration et pas trop souvent.
La modification de cette option requiert une mise à jour de votre .htaccess.
', 255 | 'virtual_root' => 'Racine Virtuelle', 256 | 'virtual_root_explain' => 'Si phpBB est installé dans un sous dossier (exemple phpBB3/), vous pouvez simuler une installation à la racine du domaine pour les liens réécrits.

Exemple :
phpBB3/titre-forum-fxx/titre-sujet-txx.html VS titre-forum-fxx/titre-sujet-txx.html pour une URL de sujet.

Cela peut être pratique pour raccourcir vos URLs, surtout si vous utilisez l’option "Dossiers Virtuels". Les liens non réécrits continueront d’apparaître et de fonctionner à l’intérieur du dossier d’installation de phpBB.

Nota Bene :
L’utilisation de cette option impose d’utiliser une page d’accueil pour votre forum (comme forum.html).
Elle peut également changer un grand nombre d’URLs de votre site presque trop facilement.
Si vous l’activez sur un site déjà convenablement indexé, l’opération doit être réalisée avec autant de soins et de réflexion préalable que s’il s’agissait d’une migration et pas trop souvent.
La modification de cette option requiert une mise à jour de votre .htaccess.
', 257 | 'cache_layer' => 'Cache des URLs des forums', 258 | 'cache_layer_explain' => 'Active le cache des URLs des forums, ce qui permet de dissocier leur titres de leurs URLs.
Exemple :
titre-forum-fxx/ VS mots-clés-fxx/ pour une URL de forum.

Nota Bene :
Cette option vous permet de modifier les URLs de forum, ainsi que potentiellement celle de nombreux sujets si vous utilisez l’option "Dossiers Virtuels".
Les URLs des sujets seront toujours convenablement redirigées par le Zéro Duplicate.
Ce sera aussi le cas pour les forums dont les URLs comportent délimiteur et ID, voir ci-dessous.
', 259 | 'rem_ids' => 'Retrait des ID de forums', 260 | 'rem_ids_explain' => 'Permet de retirer le délimiteur et l’ID des forums de leurs URLs. Nécessite l’activation du Cache.

Exemple :
mots-cles-fxx/ VS mots-cles/ pour une URL de forum.

Nota Bene :
Cette option vous permet de modifier les URLs de forum, ainsi que potentiellement celle de nombreux sujets si vous utilisez l’option "Dossiers Virtuels".
Les URLs des sujets seront toujours convenablement redirigées par le Zéro Duplicate.
Cela ne sera pas le cas pour les URLs des forums utilisant cette option :
mots-cles-fxx/ sera toujours convenablement redirigé, mais ce ne sera plus le cas si vous éditez par la suitemots-cles/ pour utiliser par exemple autres-mots-cles/.
Dans ce cas, mots-cles/ sera considéré comme un forum qui n’existe pas, à défaut de redirections personnalisées. Cela dit, c’est une optimisation intéressante pour le référencement.
', 261 | 'redirect_404_forum' => 'Redirection des forums en 404', 262 | 'redirect_404_forum_explain' => 'Rediriger les URLs de forums qui n’existent pas vers l’index au lieux d’emmetre une 404 et d’afficher le message de phpBB.', 263 | 'redirect_404_topic' => 'Redirection des messages en 404', 264 | 'redirect_404_topic_explain' => 'Rediriger les URLs de sujets et messages qui n’existent pas vers l’index au lieux d’emmètre une 404 et d’afficher le message de phpBB.', 265 | // copytrights 266 | 'copyrights' => 'Copyrights', 267 | 'copyrights_img' => 'Lien Image', 268 | 'copyrights_img_explain' => 'Vous pouvez afficher le lien en retour vers phpBB SEO grâce à une image ou un simple texte.', 269 | 'copyrights_txt' => 'Texte du lien', 270 | 'copyrights_txt_explain' => 'Vous pouvez personnaliser le texte du lien en retour vers phpBB SEO, laissez vide pour les valeurs par défauts.', 271 | 'copyrights_title' => 'Titre du lien', 272 | 'copyrights_title_explain' => 'Vous pouvez personaliser le texte du titre du lien en retour vers phpBB SEO, laissez vide pour les valeurs par défauts.', 273 | // Zero duplicate 274 | // Options 275 | 'ACP_ZERO_DUPE_OFF' => 'Inactif', 276 | 'ACP_ZERO_DUPE_MSG' => 'Message', 277 | 'ACP_ZERO_DUPE_GUEST' => 'Invités', 278 | 'ACP_ZERO_DUPE_ALL' => 'Tous', 279 | 'zero_dupe' => 'Zéro Duplicate', 280 | 'zero_dupe_explain' => 'Les options suivantes concernent le Zéro Duplicate, vous pouvez les modifier à votre guise.
Ces options n’entrainent pas de modification du .htaccess.', 281 | 'zero_dupe_on' => 'Activer le Zéro Duplicate', 282 | 'zero_dupe_on_explain' => 'Permet d’activer les redirections du Zéro Duplicate.', 283 | 'zero_dupe_strict' => 'Mode strict', 284 | 'zero_dupe_strict_explain' => 'Quand il est activé le Zéro Dupe vérifiera que l’URL entrante est exactement égale à l’URL attendue.
Quand il ne l’est pas le Zéro Dupe vérifiera uniquement que l’URL entrante commence bien par l’URL attendue.
L’intérêt de ce réglage est de rendre plus facile l’installation et l’utilisation de mod qui ajouterait de telles variables, tout en maintenant une réduction de duplicate proche de 100 %.', 285 | 'zero_dupe_post_redir' => 'Redirection des messages', 286 | 'zero_dupe_post_redir_explain' => 'L’option va déterminer la manière de prendre en charge les URLs des messages ; elle peut prendre quatre valeurs :
 Inactif, Pour désactiver les redirections des URLs de messages,
 Message, Pour s’assurer seulement que postxx.html est utilisé pour une URL de message,
 Invités, Pour rediriger les invités si besoin sur l’URL du sujet correspondant, plutot que sur postxx.html, et seulement s’assurer que postxx.html est utilisé pour les utilisateurs enregistrés,
 Tous, Pour rediriger si besoin sur l’URL du sujet correspondant.

Nota Bene :
Conserver les URLs des messages en postxx.html est sans conséquence pour votre référencement dans la mesure ou vous avez bien mis en place l’interdiction de ces URLs dans votre robots.txt
C’est certainement la redirection qui interviendrait le plus souvent sinon.
De plus si vous choisissez de rediriger postxx.html dans tous les cas, cela implique qu’un message qui serait posté dans un sujet et qui serait ensuite déplacé dans un autre verra son URL changer.
Ce n’est pas grave d’un point de vue du référencement, le Zéro Duplicate veille, mais l’URL initiale d’un message déplacé ne sera plus liée à celui ci dans ce cas là.
', 287 | // no duplicate 288 | 'no_dupe' => 'No Duplicate', 289 | 'no_dupe_on' => 'Activer le No Duplicate', 290 | 'no_dupe_on_explain' => 'Le mod No Duplicate remplace les URLs de messages par leurs équivalents en URLs de sujet (avec pagination).
L’activation du mod ajoute un LEFT JOIN sur une requête existante. Cela veut dire un peu plus de travail, mais cela ne devrait pas influencer significativement le temps de chargement de page.', 291 | )); 292 | --------------------------------------------------------------------------------