Search Engine Friendly URLs/pt-br: Difference between revisions

From Joomla! Documentation

Created page with "URLs Amigáveis"
 
FuzzyBot (talk | contribs)
Updating to match new version of source page
 
(68 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<noinclude><languages /></noinclude>
<noinclude><languages /></noinclude>
<onlyinclude>
<onlyinclude>
'''Search engine friendly (SEF)''', '''human-readable''' or  [[wikipedia:Clean_URL|clean URLs]] are URLs that make sense to both humans and search engines because they explain the path to the particular page they point to. Since version 1.5, Joomla! is capable of creating and parsing URLs in any format, including SEF URLs. This does not depend on URL rewriting executed by the web server, so it works even if Joomla! runs a server other than Apache with the mod_rewrite module. The SEF URLs follow a certain fixed pattern, but the user can define a [[Alias|short descriptive text (alias)]] for each segment of the URL.
<div class="mw-translate-fuzzy">
'''Amigável para os mecanismos de pesquisas (SEF)''', '''legível por humanos''' ou [[wikipedia:pt:Slug_(programação)|localizadores uniformes de recursos (URLs) limpos]] são localizadores uniformes de recursos (URLs) que fazem sentido tanto para humanos quanto para mecanismos de pesquisa porque explicam o caminho para a página específica para a qual apontam. Desde a versão 1.5, Joomla! é capaz de criar e analisar localizadores uniformes de recursos (URLs) em qualquer formato, incluindo localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs). Isso não depende da reescrita de localizadores uniformes de recursos (URLs) executada pelo servidor web, então funciona mesmo que o Joomla! seja executado um servidor diferente do Apache com o módulo mod_rewrite. Os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) seguem um certo padrão fixo, mas o usuário pode definir um [[Alias/pt-br|texto descritivo curto (alias)]] para cada segmento dos localizadores uniformes de recursos (URLs).
</div>


Internally, the local part of a SEF URL (the part after the domain name) is called a '''route'''. Creating and processing SEF URLs is therefore referred to as '''routing''', and the relevant code is called a '''router'''.
<div class="mw-translate-fuzzy">
Internamente, a parte local de um localizador uniforme de recursos (URL) amigável para mecanismos de pesquisas (SEF) (a parte após o nome do domínio) é chamada de '''rota'''. A criação e processamento dos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) é, portanto, chamado de '''roteamento''', e o código relevante é chamado de '''roteador'''.
</div>
</onlyinclude>
</onlyinclude>
A good example of routing is the URL to "Welcome to Joomla!" article in the sample data.
<div class="mw-translate-fuzzy">
Um bom exemplo de roteamento é o localizador uniforme de recursos (URL) para o artigo "Bem-vindo ao Joomla!" nos dados de amostras.
</div>


* Without SEF URLs turned on, the URL is <code><nowiki>http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50</nowiki></code>
<div class="mw-translate-fuzzy">
* With SEF URLs on and mod_rewrite off, it's <code><nowiki>http://www.example.com/index.php/the-­news/1-­latest­-news/1­-welcome­-to­-joomla</nowiki></code>
* Sem os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) ativados, o localizador uniforme de recursos (URL) é <code><nowiki>http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50</nowiki></code>
* With both SEF URLs and mod_rewrite on, it's <code><nowiki>http://www.example.com/the-­news/1­-latest-­news/1-­welcome-­to­-joomla</nowiki></code>
* Com os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) ativados e o mod_rewrite desativado, é <code><nowiki>http://www.example.com/index.php/the-­news/1-­latest­-news/1­-welcome­-to­-joomla</nowiki></code>
* Com os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) e o mod_rewrite, ambos ativados, é <code><nowiki>http://www.example.com/the-­news/1­-latest-­news/1-­welcome-­to­-joomla</nowiki></code>
</div>


Search engine friendly URLs can be activated by turning on the '''Search Engine Friendly URLs''' option in the ''Global Configuration''. This option is on by default since Joomla! 1.6. See [[Enabling Search Engine Friendly (SEF) URLs]] for more information.
<div class="mw-translate-fuzzy">
Os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) podem ser ativados ativando a opção '''localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)''' nas ''configuração globais''. Esta opção está ativada por padrão desde o Joomla! 1.6. Consulte [[Enabling Search Engine Friendly (SEF) URLs/pt-br|Ativando localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)]] para obter mais informações.
</div>


== FAQs ==
* ''Search Engine Friendly URLs'': This is the main switch to enable SEF URLs and creates the URLs like in the second example above.
* ''Use URL Rewriting'': When enabled, the server tries to use mod_rewrite and shorten the URL further by removing the ''/index.php/'' from the URL.


=== What do the numbers in the URL mean? ===
* ''Add Suffix to URL'': When enabled, the URLs get a suffix similar to a file extension (depending on the output). By default this is ''.html'', but for a JSON output this can also be ''.json''.
By comparing the old and the new URL we can see numbers in the old URL,
* ''Unicode Aliases'': Joomla by default tries to convert any alias to a plain ASCII representation for the URL, converting for example ''ö'' to ''oe''. Enabling this option keeps the original unicode string. This might be preferable for your local users, but create a barrier for international users who don't know how to generate those characters.
 
The system behind these SEF URLs by default is very lenient and allows a lot of different URLs to reach the same page. While this is user-friendly, Google doesn't really like that. So starting with Joomla 5.1 there are additional switches in the ''System - SEF'' plugin which enforce a stricter behavior:
 
* ''Forcibly remove index.php in URL with redirects'': If the site is called with an index.php in the URL, Joomla will now redirect to the page without an index.php with a 301 redirect. From Joomla 6.0 onwards this option will be removed again and the behavior enabled as standard.
 
* ''Trailing slash for URLs'': This option allows to set and enforce if a URL should have a trailing slash or not. This is also enforce with a 301 redirect if the current URL does not confirm the selected setting. By default the site accepts both. This option is only available when ''Add Suffix to URL'' is disabled. Starting with Joomla 6.0 the default behavior will be to enforce without a trailing slash.
 
* ''Enforce a suffix by redirect'': When this setting and ''Add Suffix to URL'' is enabled, URLs without a suffix are redirected to their "correct" URL with a suffix with a 301 redirect. Starting with Joomla 6.0 this option will be the standard behavior and the option will then be removed again.
 
* ''Disallow non-SEF URLs'': Enabling this option means that Joomla will try to build the correct URL from what it understood of the current URL and if the current URL and the one Joomla built itself are not identical, Joomla will redirect to the one it built itself. This means that URLs like ''/component/content/article/42'' or ''index.php?option=com_content&view=article&id=42'' would be correctly redirected to ''/welcome/to/joomla''. This option can create issues in some site setups, so test your site thoroughly after enabling this.
 
For more information please see [[Enabling Search Engine Friendly (SEF) URLs]].
 
== Perguntas frequentes ==
 
<div class="mw-translate-fuzzy">
=== O que significam os números nos localizadores uniformes de recursos (URLs)  ===
Ao comparar os localizadores uniformes de recursos (URLs) antigo e novo, podemos ver números no localizador uniforme de recursos (URL) antigo,
</div>


<pre><nowiki>http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50</nowiki></pre>
<pre><nowiki>http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50</nowiki></pre>


but also in the new URL:
mas também no novo localizador uniforme de recurso (URL):


<pre><nowiki>http://www.example.com/the-­news/1­-latest-­news/1-­welcome-­to­-joomla</nowiki></pre>
<pre><nowiki>http://www.example.com/the-­news/1­-latest-­news/1-­welcome-­to­-joomla</nowiki></pre>


These numbers are the parameters that are needed by Joomla! to get the internal URL and show the page you want to see. (In this case, the first numeral one is the ID of the category, the second numeral one is the ID of the article.)
<div class="mw-translate-fuzzy">
Esses números são os parâmetros necessários para o Joomla! obter o localizador uniforme de recurso (URL) interno e mostrar a página que você deseja ver. (Neste caso, o primeiro numeral é o ID da categoria e o segundo numeral é o ID do artigo.)
</div>
 
<div class="mw-translate-fuzzy">
=== Não há mais <code>index.php</code> no localizadores uniformes de recursos (URLs). Posso excluir o arquivo agora? ===
Não! Os localizadores uniformes de recursos (URLs) não contêm mais o <code>index.php</code> pois, internamente, o mod_rewrite só redireciona você para o caminho original sem mostrá-lo.
</div>
 
<div class="mw-translate-fuzzy">
=== O que é o valor [[Alias/pt-br|alias]]? E como ele é criado? ===
O alias é listado abaixo do campo "título" em artigos, categorias, seções e itens de menu. O Joomla! pode criar automaticamente o alias para você. Um alias automático começa com o título. Todas as letras maiúsculas são alteradas para minúsculas. Espaços e caracteres especiais que não são permitidos em localizadores uniformes de recursos (URLs), são alterados para traços.
</div>
 
<div class="mw-translate-fuzzy">
=== Quero especificar meu próprio valor para alias. ===
Se você não quiser o alias fornecido pelo Joomla!, você pode inserir um valor de sua escolha nesse campo. Muitos acreditam que usar boas palavras-chave em seus localizadores uniformes de recursos (URLs) ajuda na otimização dos mecanismos de pesquisas. Você pode fazer isso incluindo essas palavras-chave em seu título e permitindo que o Joomla! crie o alias ou criando você mesmo o alias.
</div>
 
<div class="mw-translate-fuzzy">
=== Como o alias é usado em localizadores uniformes de recursos (URLs)? ===
Para itens de menus, o Joomla! usa os aliases como os slugs dos localizadores uniformes de recursos (URLs). Suponha que você use as duas primeiras opções dos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) e crie um item de menu chamado "produtos". Seu localizador uniforme de recursos (URL) seria example.com/produtos.
</div>


=== There is no <code>index.php</code> in the URL anymore. Can I delete the file now? ===
<div class="mw-translate-fuzzy">
No! The URL may doesn't contain the <code>index.php</code> anymore, but internally the mod_rewrite will only redirect to the original path without showing it to you.
O Joomla! também usa os valores de chaves primárias de dados nos localizadores uniformes de recursos (URLs) para ajudar o roteador a navegar para a página correta. Continuando com o exemplo anterior, se o item de menu de seus produtos fosse para um blog de artigos/categorias, o link para o título do artigo e/ou o link leia mais teria três partes:
</div>


=== What is the [[Alias]] value? And how does it get created? ===
<div class="mw-translate-fuzzy">
Alias is listed beneath the Title field in Articles, Categories, Sections and Menu Items. Joomla! can automatically create the alias for you. An automatic alias begins with the title. All upper case letters are changed to lower case. Spaces and special characters not allowed in a URL; they are changed to dashes.
* O localizador uniforme de recursos (URL) do item de menu - example.com/produtos;
</div>


=== I want to specify my own value for Alias. ===
<div class="mw-translate-fuzzy">
If you do not like the alias provided by Joomla!, you can enter a value of your choosing into that field. Many believe using good keywords in your URL helps search engine optimization. You can do so by including those keywords in your title, and allowing Joomla! to create the alias, or by creating the alias yourself.
* Além disso, a chave primária para a categoria e o alias da categoria - 32-fruta;
</div>


=== How is Alias used in a URL? ===
<div class="mw-translate-fuzzy">
For a menu item, Joomla! uses the alias as the URL plug. Assume that you use the first two SEF URL options and you create a menu item called Products. Your URL would be example.com/products.
* Além disso, a chave primária para o artigo e o alias do artigo - 1-laranja;


Joomla! also uses the primary key values of data within the URL to help the router navigate to the correct page. Continuing with the previous example, if your products menu item was for an Article­/Category Blog, the link for the Article Title and/or Read More link would have three parts:
<!-- Nesse caso, o texto original menciona "maçã" ("apple") como exemplo mas, devido a tradução da palavra conter "ç" e "~" e ao fato de eu não poder verificar, nesse momento, qual seria o URL resultante ("maca" ou outro), mencionei "laranja" como exemplo substituto em seu lugar. -->
</div>


* The menu item URL - example.com/products;
<div class="mw-translate-fuzzy">
O localizador uniforme de recursos (URL) completo é: <code><nowiki>http://example.com/produtos/32-fruta/1-laranja</nowiki></code>


* Plus, the primary key for the Category and the Category alias - 32-fruit;
<!-- Nesse caso, o texto original menciona "maçã" ("apple") como exemplo mas, devido a tradução da palavra conter "ç" e "~" e ao fato de eu não poder verificar, nesse momento, qual seria o URL resultante ("maca" ou outro), mencionei "laranja" como exemplo substituto em seu lugar. -->
</div>


* Plus, the primary key for the Article and the Article alias - 1-apple;
<div class="mw-translate-fuzzy">
=== Como posso me livrar dos números nos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)? ===
Os números nos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) são necessários para o roteador do Joomla! saber como direcionar o tráfego do site. Uma vez que a lógica do roteador se estabilize, plug-ins de sistema de terceiros simples podem ser desenvolvidos para aumentar os recursos do roteador, permitindo mais opções. Nesse momento, os números provavelmente serão removidos dos localizadores uniformes de recursos (URLs).
</div>


The complete URL is: <code><nowiki>http://example.com/products/32-fruit/1-apple</nowiki></code>
== Formatos de rota e o mecanismo de roteamento ==


=== How can I get rid of the numbers in the SEF URLs? ===
''Esta seção descreve o mecanismo de roteamento principal (incorporado) do Joomla!. As extensões de roteamento podem alterar a maneira como as rotas são criadas em seu sistema.''
The numbers in the SEF URL are needed by Joomla!'s router to know how to direct site traffic. Once the router logic stabilizes, simple third party system plugins can be developed to augment the router capabilities by allowing more choice. At that time, numbers will likely be removed from the URL.


== Route Formats and the Routing Mechanism ==
=== Formatos de rota ===


''This section describes Joomla!'s core (built-in) routing mechanism. Routing extensions may change the way routes are created on your system.''
<div class="mw-translate-fuzzy">
Para descrever o mecanismo de roteamento do Joomla! com mais detalhes, primeiro precisamos definir o que chamamos de '''rota'''. Suponha que o Joomla! tenha sido instalado em <code><nowiki>http://example.com/sites/primeiro/</nowiki></code>. O caminho de instalação é geralmente chamado de '''localizador uniforme de recursos (URL) base'''. Um possível exemplo de localizador uniforme de recursos (URL) é <code><nowiki>http://example.com/sites/primeiro/produtos/32-fruta/1-laranja</nowiki></code>. A primeira parte deste localizador uniforme de recursos (URL) é o localizador uniforme de recursos (URL) base mencionado acima e nem o Joomla! nem qualquer roteador componente pode criar localizadores uniformes de recursos (URLs) com uma primeira parte diferente. A segunda parte, <code>produtos/32-fruta/1-laranja</code>, é uma '''rota''', composta por três '''segmentos'''.


=== Route Formats ===


To describe the Joomla! routing mechanism in more detail, we first need to pin down what we refer to as a '''route'''. Suppose that Joomla! has been installed in <code><nowiki>http://example.com/sites/first/</nowiki></code>. The installation path is generally referred to as the '''base URL'''. A possible example URL is <code><nowiki>http://example.com/sites/first/products/32-fruit/1-apple</nowiki></code>. The first part of this URL is the aforementioned base URL, and neither Joomla! nor any component router can create URLs with a different first part. The second part, <code>products/32-fruit/1-apple</code>, is a '''route''', consisting of three '''segment'''s.
<!-- Nesse caso, o texto original menciona "maçã" ("apple") como exemplo mas, devido a tradução da palavra conter "ç" e "~" e ao fato de eu não poder verificar, nesse momento, qual seria o URL resultante ("maca" ou outro), mencionei "laranja" como exemplo substituto em seu lugar. -->
</div>


The first segment of a route is, for regular URLs, the alias of a menu item. The SEF URL is said to be '''routed through''' that menu item. The other segments are determined entirely by the router of the component that provides the type of the menu item. The ''Category - Blog'' menu item type, for example, is provided by the [[Content]] component, and therefore that component's router is responsible for building and parsing the remaining segments.
<div class="mw-translate-fuzzy">
O primeiro segmento de uma rota é, para localizadores uniformes de recursos (URLs) regulares, o alias de um item de menu. Diz-se que os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) são '''roteados através''' desse item de menu. Os demais segmentos são determinados inteiramente pelo roteador do componente que fornece o tipo do item de menu. O tipo de item de menu ''Categoria - Blog'', por exemplo, é fornecido pelo componente de [[Content/pt-br|conteúdo]] e, portanto, o roteador desse componente é responsável por construir e analisar os segmentos restantes.
</div>


It is also possible (for extensions) to ask the system to create a route without supplying a menu item to route through. In that case, the system will usually decide to create a special route that has the word <code>component</code> as the first segment. These routes are created using a fixed format: the name of the component (without the leading <code>com_</code>) is selected as the second segment and any parameters as the other segments.
<div class="mw-translate-fuzzy">
Também é possível (para extensões) solicitar ao sistema que crie uma rota sem fornecer um item de menu para percorrer. Nesse caso, o sistema geralmente decidirá criar uma rota especial que tenha a palavra <code>component</code> como primeiro segmento. Essas rotas são criadas usando um formato fixo: o nome do componente (sem o <code>com_</code> inicial) é selecionado como o segundo segmento e quaisquer parâmetros como os outros segmentos.
</div>


=== Limitations ===
=== Limitações ===


It is important to note creating a menu item is the ''only'' way for a Joomla! user to define a route that leads to a specific component. It is, however, possible to create a route without showing it on the site (in a menu). An often-applied method is to create a menu item in a menu that isn't displayed anywhere. Such a menu is usually called a [[Menu|hidden menu]].
<div class="mw-translate-fuzzy">
É importante notar que a criação de um item de menu é a "única" maneira para um usuário do Joomla! definir uma rota que leva a um componente específico. É, no entanto, possível criar uma rota sem apresentá-la no site (em um menu). Um método frequentemente aplicado é criar um item de menu em um menu que não é exibido em nenhum lugar. Esse menu geralmente é chamado de [[Menu/pt-br|menu oculto]].
</div>


The previous paragraph implies that it is not possible to make one component responsible for handling all routes. For example, it is not possible to specify that the URL <code><nowiki>http://example.com/thealias</nowiki></code> should display the Content item with the alias <code>thealias</code>, where <code>thealias</code> could be any word. If this needs to be done for a small number of articles, menu items can be created manually for these. Else a routing extension is necessary.
<div class="mw-translate-fuzzy">
O parágrafo anterior implica que não é possível tornar um componente responsável pelo manuseio de todas as rotas. Por exemplo, não é possível especificar que o localizador uniforme de recursos (URL) <code><nowiki>http://example.com/o_alias</nowiki></code> deva exibir o item "conteúdo" com o alias <code>o_alias</code >, onde <code>o_alias</code> pode ser qualquer palavra. Se isso precisar ser feito para um pequeno número de artigos, os itens de menu podem ser criados manualmente para eles. Caso contrário, uma extensão de roteamento é necessária.
</div>


This routing mechanism is therefore not as flexible as users sometimes require. On the other hand, it has one large advantage: it reduces the chance of ambiguous routes (routes that could lead to two different pages). Since the first segment of a route is always a menu item alias, the system immediately knows which component's router must be used to parse it.
Esse mecanismo de roteamento, portanto, não é tão flexível quanto os usuários às vezes exigem. Por outro lado, tem uma grande vantagem: reduz a chance de rotas ambíguas (rotas que podem levar a duas páginas diferentes). Como o primeiro segmento de uma rota é sempre um alias de item de menu, o sistema sabe imediatamente qual roteador de componente deve ser usado para analisá-lo.


== Implementation Details ==
== Detalhes de implementação ==
=== Handling Routes ===
=== Manipulando rotas ===


''This section describes the routing implementation. If you are a component developer, see [[Supporting SEF URLs in your component]].''
''Esta seção descreve a implementação de roteamento. Se você for um desenvolvedor de componentes, consulte [[Supporting SEF URLs in your component/pt-br|Suportando localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) em seu componente]].''


Joomla routes are created and resolved by [[JRouter|the JRouter class]]. This class looks in the component root of the currently active component (specified in the <code>option</code> parameter in the query string) and includes the <code>router.php</code> file in that component's root directory. It then calls one of two functions: one for creating the SEF URL and one for interpreting the SEF URL.
<div class="mw-translate-fuzzy">
As rotas do Joomla são criadas e resolvidas pela [[JRouter/pt-br|classe JRouter]]. Esta classe procura na raiz do componente atualmente ativo (especificado no parâmetro <code>option</code> na string de consulta) e inclui o arquivo <code>router.php</code> no diretório raiz desse componente. Em seguida, ele chama uma das duas funções: uma para criar o localizador uniforme de recursos (URLs) amigável para mecanismos de pesquisas (SEF) e outra para interpretar o localizador uniforme de recursos (URLs) amigável para mecanismos de pesquisas (SEF).
</div>


The JRouter class is overridden by the Joomla CMS in <code>/includes/router.php</code>. In this file the build and parse functions are overridden to properly build and parse the URLs for the Joomla CMS.
<div class="mw-translate-fuzzy">
A classe JRouter é substituída pelo S.G.M. (CMS) do Joomla em <code>/includes/router.php</code>. Neste arquivo, as funções de construção e análise são substituídas para construir e analisar corretamente os localizadores uniformes de recursos (URLs) para o S.G.M. (CMS) Joomla.
</div>


The <code>router.php</code> file in each component (for example, <code>/components/com_content/router.php</code>) should contain the following two functions:
<div class="mw-translate-fuzzy">
* ContentBuildRoute - this builds the SEF URL
O arquivo <code>router.php</code> em cada componente (por exemplo, <code>/components/com_content/router.php</code>) deve conter as duas funções a seguir:
** Parameters
* ContentBuildRoute - isso cria os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)
*** $query - this is a named array containing the querystring variables
** Parâmetros
** Returns: an array of segments where each segment is separated by a '/' when later combined to create the actual URL (the items in the array should not contain '/' characters)
*** $query - este é um arranjo nomeado contendo as variáveis da(s) string(s) de consulta(s)
* ContentParseRoute - this interprets an SEF URL
** Retorno: posteriormente combinado para criar os localizadores uniformes de recursos (URLs) reais (os itens no arranjo não devem conter o caractere "/")
** Parameters
* ContentParseRoute - isso interpreta os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)
*** $segments - this is an array that contains the segments of the URL requested.
** Parâmetros
** Returns: a name => value array of the querystring variables that the link maps to
*** $segments - este é um arranjo que contém os segmentos dos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) solicitados.
** Retorno: um nome => arranjo de valores das variáveis da(s) string(s) de consulta(s) que o link mapeia
</div>


=== The SEF Plugin ===
<div class="mw-translate-fuzzy">
The Joomla ''System - SEF'' plugin inherits <code>JPlugin</code> and implements the <code>onAfterRender()</code> function. In this function the body of the response that will be sent to the browser is retrieved using <code>JResponse::getBody()</code>. The body of the response is then searched for links containing <code>/index.php...</code> and replaces them with a correct SEF URL by calling <code>JRoute::_(''url'')</code>.
=== O plug-in SEF ===
O plugin ''Sistema - SEF'' do Joomla herda <code>JPlugin</code> e implementa a função <code>onAfterRender()</code>. Nesta função o corpo da resposta que será enviada ao navegador é recuperado usando <code>JResponse::getBody()</code>. O corpo da resposta é então pesquisado por links contendo <code>/index.php...</code> e os substitui por um localizador uniforme de recursos (URL) amigável para os mecanismos de pesquisas (SEF)  correto chamando <code>JRoute::_(''url'')</code>.
</div>


JRoute builds SEF URLs by instantiating a <code>JRouter</code> object and requesting that it build the correct link from the passed in URL.
<div class="mw-translate-fuzzy">
JRoute constrói localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) instanciando um objeto <code>JRouter</code> e solicitando que ele construa o link correto a partir do localizador uniforme de recursos (URL) passado.
</div>


=== Handling SEF URLs ===
<div class="mw-translate-fuzzy">
By default the SEF URLs are handled by the <code>JRouterSite</code> object (from <code>/includes/router.php</code>) and is called by a call to <code>JApplication::route()</code> in index.php. This call is made on the <code>$app</code> variable which is actually an instance of <code>JSite</code> (from <code>/includes/application.php</code>).
=== Manipulação de localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) ===
Por padrão, os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) são tratados pelo objeto <code>JRouterSite</code> (de <code>/includes/router.php</code>) e são chamados por uma chamada para <code>JApplication::route() </code> em index.php. Esta chamada é feita na variável <code>$app</code> que na verdade é uma instância de <code>JSite</code> (de <code>/includes/application.php</code>).
</div>


<code>JApplication::route()</code> has a non-destructive result on the <code>$_GET</code> array. That is, <code>JApplication::route()</code> sets variables in <code>$_GET</code> by calling <code>JRequest::set()</code> with the overwrite flag set to false. Thus if a variable name is returned from <code>JRouter::route()</code> that is already in <code>$_GET</code>, it will not put that value into <code>$_GET</code>. This allows for custom routing.
<div class="mw-translate-fuzzy">
<code>JApplication::route()</code> tem um resultado não destrutivo no arranjo <code>$_GET</code>. Ou seja, <code>JApplication::route()</code> define variáveis em <code>$_GET</code> chamando <code>JRequest::set()</code> com o sinalizador de substituição definido como falso . Assim, se um nome de variável for retornado de <code>JRouter::route()</code> que já está em <code>$_GET</code>, ele não colocará esse valor em <code>$_GET</code >. Isso permite o roteamento personalizado.
</div>


=== Custom Routing ===
<div class="mw-translate-fuzzy">
Joomla allows you to create your own routing mechanism. In order to create this mechanism you must have a plugin that overrides the <code>JPlugin::onAfterInitialise()</code> function. This function then parses the URL and creates the needed variables in <code>$_GET</code> before the standard Joomla routing is done.
=== Roteamento personalizado ===
O Joomla permite que você crie seu próprio mecanismo de roteamento. Para criar este mecanismo você deve ter um plugin que substitua a função <code>JPlugin::onAfterInitialise()</code>. Esta função então analisa o localizador uniforme de recursos (URL) e cria as variáveis necessárias em <code>$_GET</code> antes que o roteamento padrão do Joomla seja feito.
</div>


''See [[Creating a System Plugin to augment JRouter]] for an example.''
''Consulte [[Creating a System Plugin to augment JRouter|Criando um plugin de sistema para aumentar o JRouter]] (apenas em inglês) para um exemplo.''


[[Category:Search Engine Friendly URLs| ]]
[[Category:Search Engine Friendly URLs/pt-br| ]]

Latest revision as of 06:25, 24 January 2025

Amigável para os mecanismos de pesquisas (SEF), legível por humanos ou localizadores uniformes de recursos (URLs) limpos são localizadores uniformes de recursos (URLs) que fazem sentido tanto para humanos quanto para mecanismos de pesquisa porque explicam o caminho para a página específica para a qual apontam. Desde a versão 1.5, Joomla! é capaz de criar e analisar localizadores uniformes de recursos (URLs) em qualquer formato, incluindo localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs). Isso não depende da reescrita de localizadores uniformes de recursos (URLs) executada pelo servidor web, então funciona mesmo que o Joomla! seja executado um servidor diferente do Apache com o módulo mod_rewrite. Os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) seguem um certo padrão fixo, mas o usuário pode definir um texto descritivo curto (alias) para cada segmento dos localizadores uniformes de recursos (URLs).

Internamente, a parte local de um localizador uniforme de recursos (URL) amigável para mecanismos de pesquisas (SEF) (a parte após o nome do domínio) é chamada de rota. A criação e processamento dos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) é, portanto, chamado de roteamento, e o código relevante é chamado de roteador.

Um bom exemplo de roteamento é o localizador uniforme de recursos (URL) para o artigo "Bem-vindo ao Joomla!" nos dados de amostras.

  • Sem os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) ativados, o localizador uniforme de recursos (URL) é http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50
  • Com os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) ativados e o mod_rewrite desativado, é http://www.example.com/index.php/the-­news/1-­latest­-news/1­-welcome­-to­-joomla
  • Com os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) e o mod_rewrite, ambos ativados, é http://www.example.com/the-­news/1­-latest-­news/1-­welcome-­to­-joomla

Os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) podem ser ativados ativando a opção localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) nas configuração globais. Esta opção está ativada por padrão desde o Joomla! 1.6. Consulte Ativando localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) para obter mais informações.

  • Search Engine Friendly URLs: This is the main switch to enable SEF URLs and creates the URLs like in the second example above.
  • Use URL Rewriting: When enabled, the server tries to use mod_rewrite and shorten the URL further by removing the /index.php/ from the URL.
  • Add Suffix to URL: When enabled, the URLs get a suffix similar to a file extension (depending on the output). By default this is .html, but for a JSON output this can also be .json.
  • Unicode Aliases: Joomla by default tries to convert any alias to a plain ASCII representation for the URL, converting for example ö to oe. Enabling this option keeps the original unicode string. This might be preferable for your local users, but create a barrier for international users who don't know how to generate those characters.

The system behind these SEF URLs by default is very lenient and allows a lot of different URLs to reach the same page. While this is user-friendly, Google doesn't really like that. So starting with Joomla 5.1 there are additional switches in the System - SEF plugin which enforce a stricter behavior:

  • Forcibly remove index.php in URL with redirects: If the site is called with an index.php in the URL, Joomla will now redirect to the page without an index.php with a 301 redirect. From Joomla 6.0 onwards this option will be removed again and the behavior enabled as standard.
  • Trailing slash for URLs: This option allows to set and enforce if a URL should have a trailing slash or not. This is also enforce with a 301 redirect if the current URL does not confirm the selected setting. By default the site accepts both. This option is only available when Add Suffix to URL is disabled. Starting with Joomla 6.0 the default behavior will be to enforce without a trailing slash.
  • Enforce a suffix by redirect: When this setting and Add Suffix to URL is enabled, URLs without a suffix are redirected to their "correct" URL with a suffix with a 301 redirect. Starting with Joomla 6.0 this option will be the standard behavior and the option will then be removed again.
  • Disallow non-SEF URLs: Enabling this option means that Joomla will try to build the correct URL from what it understood of the current URL and if the current URL and the one Joomla built itself are not identical, Joomla will redirect to the one it built itself. This means that URLs like /component/content/article/42 or index.php?option=com_content&view=article&id=42 would be correctly redirected to /welcome/to/joomla. This option can create issues in some site setups, so test your site thoroughly after enabling this.

For more information please see Enabling Search Engine Friendly (SEF) URLs.

Perguntas frequentes

O que significam os números nos localizadores uniformes de recursos (URLs)

Ao comparar os localizadores uniformes de recursos (URLs) antigo e novo, podemos ver números no localizador uniforme de recursos (URL) antigo,

http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50

mas também no novo localizador uniforme de recurso (URL):

http://www.example.com/the-­news/1­-latest-­news/1-­welcome-­to­-joomla

Esses números são os parâmetros necessários para o Joomla! obter o localizador uniforme de recurso (URL) interno e mostrar a página que você deseja ver. (Neste caso, o primeiro numeral é o ID da categoria e o segundo numeral é o ID do artigo.)

Não há mais index.php no localizadores uniformes de recursos (URLs). Posso excluir o arquivo agora?

Não! Os localizadores uniformes de recursos (URLs) não contêm mais o index.php pois, internamente, o mod_rewrite só redireciona você para o caminho original sem mostrá-lo.

O que é o valor alias? E como ele é criado?

O alias é listado abaixo do campo "título" em artigos, categorias, seções e itens de menu. O Joomla! pode criar automaticamente o alias para você. Um alias automático começa com o título. Todas as letras maiúsculas são alteradas para minúsculas. Espaços e caracteres especiais que não são permitidos em localizadores uniformes de recursos (URLs), são alterados para traços.

Quero especificar meu próprio valor para alias.

Se você não quiser o alias fornecido pelo Joomla!, você pode inserir um valor de sua escolha nesse campo. Muitos acreditam que usar boas palavras-chave em seus localizadores uniformes de recursos (URLs) ajuda na otimização dos mecanismos de pesquisas. Você pode fazer isso incluindo essas palavras-chave em seu título e permitindo que o Joomla! crie o alias ou criando você mesmo o alias.

Como o alias é usado em localizadores uniformes de recursos (URLs)?

Para itens de menus, o Joomla! usa os aliases como os slugs dos localizadores uniformes de recursos (URLs). Suponha que você use as duas primeiras opções dos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) e crie um item de menu chamado "produtos". Seu localizador uniforme de recursos (URL) seria example.com/produtos.

O Joomla! também usa os valores de chaves primárias de dados nos localizadores uniformes de recursos (URLs) para ajudar o roteador a navegar para a página correta. Continuando com o exemplo anterior, se o item de menu de seus produtos fosse para um blog de artigos/categorias, o link para o título do artigo e/ou o link leia mais teria três partes:

  • O localizador uniforme de recursos (URL) do item de menu - example.com/produtos;
  • Além disso, a chave primária para a categoria e o alias da categoria - 32-fruta;
  • Além disso, a chave primária para o artigo e o alias do artigo - 1-laranja;

O localizador uniforme de recursos (URL) completo é: http://example.com/produtos/32-fruta/1-laranja

Como posso me livrar dos números nos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)?

Os números nos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) são necessários para o roteador do Joomla! saber como direcionar o tráfego do site. Uma vez que a lógica do roteador se estabilize, plug-ins de sistema de terceiros simples podem ser desenvolvidos para aumentar os recursos do roteador, permitindo mais opções. Nesse momento, os números provavelmente serão removidos dos localizadores uniformes de recursos (URLs).

Formatos de rota e o mecanismo de roteamento

Esta seção descreve o mecanismo de roteamento principal (incorporado) do Joomla!. As extensões de roteamento podem alterar a maneira como as rotas são criadas em seu sistema.

Formatos de rota

Para descrever o mecanismo de roteamento do Joomla! com mais detalhes, primeiro precisamos definir o que chamamos de rota. Suponha que o Joomla! tenha sido instalado em http://example.com/sites/primeiro/. O caminho de instalação é geralmente chamado de localizador uniforme de recursos (URL) base. Um possível exemplo de localizador uniforme de recursos (URL) é http://example.com/sites/primeiro/produtos/32-fruta/1-laranja. A primeira parte deste localizador uniforme de recursos (URL) é o localizador uniforme de recursos (URL) base mencionado acima e nem o Joomla! nem qualquer roteador componente pode criar localizadores uniformes de recursos (URLs) com uma primeira parte diferente. A segunda parte, produtos/32-fruta/1-laranja, é uma rota, composta por três segmentos.


O primeiro segmento de uma rota é, para localizadores uniformes de recursos (URLs) regulares, o alias de um item de menu. Diz-se que os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) são roteados através desse item de menu. Os demais segmentos são determinados inteiramente pelo roteador do componente que fornece o tipo do item de menu. O tipo de item de menu Categoria - Blog, por exemplo, é fornecido pelo componente de conteúdo e, portanto, o roteador desse componente é responsável por construir e analisar os segmentos restantes.

Também é possível (para extensões) solicitar ao sistema que crie uma rota sem fornecer um item de menu para percorrer. Nesse caso, o sistema geralmente decidirá criar uma rota especial que tenha a palavra component como primeiro segmento. Essas rotas são criadas usando um formato fixo: o nome do componente (sem o com_ inicial) é selecionado como o segundo segmento e quaisquer parâmetros como os outros segmentos.

Limitações

É importante notar que a criação de um item de menu é a "única" maneira para um usuário do Joomla! definir uma rota que leva a um componente específico. É, no entanto, possível criar uma rota sem apresentá-la no site (em um menu). Um método frequentemente aplicado é criar um item de menu em um menu que não é exibido em nenhum lugar. Esse menu geralmente é chamado de menu oculto.

O parágrafo anterior implica que não é possível tornar um componente responsável pelo manuseio de todas as rotas. Por exemplo, não é possível especificar que o localizador uniforme de recursos (URL) http://example.com/o_alias deva exibir o item "conteúdo" com o alias o_alias, onde o_alias pode ser qualquer palavra. Se isso precisar ser feito para um pequeno número de artigos, os itens de menu podem ser criados manualmente para eles. Caso contrário, uma extensão de roteamento é necessária.

Esse mecanismo de roteamento, portanto, não é tão flexível quanto os usuários às vezes exigem. Por outro lado, tem uma grande vantagem: reduz a chance de rotas ambíguas (rotas que podem levar a duas páginas diferentes). Como o primeiro segmento de uma rota é sempre um alias de item de menu, o sistema sabe imediatamente qual roteador de componente deve ser usado para analisá-lo.

Detalhes de implementação

Manipulando rotas

Esta seção descreve a implementação de roteamento. Se você for um desenvolvedor de componentes, consulte Suportando localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) em seu componente.

As rotas do Joomla são criadas e resolvidas pela classe JRouter. Esta classe procura na raiz do componente atualmente ativo (especificado no parâmetro option na string de consulta) e inclui o arquivo router.php no diretório raiz desse componente. Em seguida, ele chama uma das duas funções: uma para criar o localizador uniforme de recursos (URLs) amigável para mecanismos de pesquisas (SEF) e outra para interpretar o localizador uniforme de recursos (URLs) amigável para mecanismos de pesquisas (SEF).

A classe JRouter é substituída pelo S.G.M. (CMS) do Joomla em /includes/router.php. Neste arquivo, as funções de construção e análise são substituídas para construir e analisar corretamente os localizadores uniformes de recursos (URLs) para o S.G.M. (CMS) Joomla.

O arquivo router.php em cada componente (por exemplo, /components/com_content/router.php) deve conter as duas funções a seguir:

  • ContentBuildRoute - isso cria os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)
    • Parâmetros
      • $query - este é um arranjo nomeado contendo as variáveis da(s) string(s) de consulta(s)
    • Retorno: posteriormente combinado para criar os localizadores uniformes de recursos (URLs) reais (os itens no arranjo não devem conter o caractere "/")
  • ContentParseRoute - isso interpreta os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)
    • Parâmetros
      • $segments - este é um arranjo que contém os segmentos dos localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) solicitados.
    • Retorno: um nome => arranjo de valores das variáveis da(s) string(s) de consulta(s) que o link mapeia

O plug-in SEF

O plugin Sistema - SEF do Joomla herda JPlugin e implementa a função onAfterRender(). Nesta função o corpo da resposta que será enviada ao navegador é recuperado usando JResponse::getBody(). O corpo da resposta é então pesquisado por links contendo /index.php... e os substitui por um localizador uniforme de recursos (URL) amigável para os mecanismos de pesquisas (SEF) correto chamando JRoute::_(url).

JRoute constrói localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) instanciando um objeto JRouter e solicitando que ele construa o link correto a partir do localizador uniforme de recursos (URL) passado.

Manipulação de localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs)

Por padrão, os localizadores uniformes de recursos (URLs) amigáveis para mecanismos de pesquisas (SEFs) são tratados pelo objeto JRouterSite (de /includes/router.php) e são chamados por uma chamada para JApplication::route() em index.php. Esta chamada é feita na variável $app que na verdade é uma instância de JSite (de /includes/application.php).

JApplication::route() tem um resultado não destrutivo no arranjo $_GET. Ou seja, JApplication::route() define variáveis em $_GET chamando JRequest::set() com o sinalizador de substituição definido como falso . Assim, se um nome de variável for retornado de JRouter::route() que já está em $_GET, ele não colocará esse valor em $_GET. Isso permite o roteamento personalizado.

Roteamento personalizado

O Joomla permite que você crie seu próprio mecanismo de roteamento. Para criar este mecanismo você deve ter um plugin que substitua a função JPlugin::onAfterInitialise(). Esta função então analisa o localizador uniforme de recursos (URL) e cria as variáveis necessárias em $_GET antes que o roteamento padrão do Joomla seja feito.

Consulte Criando um plugin de sistema para aumentar o JRouter (apenas em inglês) para um exemplo.