php - Deshágase de la ID(categoría y artículo) de la URL(Joomla 3.3/3.4/3.5)
.htaccess joomla3.3 (2)
Acabo de instalar una joomla 3.5 y el método antiguo funciona para mí. Como algo se ha modificado en el archivo del enrutador, debe repetir el procedimiento después de una actualización de joomla.
Las líneas son ahora 34 y 295 en ./components/com_content/router.php
.
De nuevo cambia el 0
en 1
para que se convierta en:
$advanced = $params->get(''sef_advanced_link'', 1);
Mi URL es, por ejemplo, http://joomla.lan/en/category-en-gb/article-en-gb
funciona bien con las Search Engine Friendly URLs
http://joomla.lan/en/category-en-gb/article-en-gb
con el Search Engine Friendly URLs
en.
Con la Adds Suffix to URL
cambiada a Yes
se agrega un .html
a la URL.
Use URL Rewriting
y Unicode Aliases
funcionan opcionalmente. Al utilizar el motor de reescritura de URL en IIS7 o Apache, debe cambiar el nombre de htaccess.txt
a .htaccess
y webconfig.txt
a webconfig
. Tenga en cuenta que algunos hosters tienen una configuración de servidor restrictiva. Si recibe un 500 internal server error
, es posible que deba editar .htaccess
y comentar las líneas Options +FollowSymlinks
y / u Options -Indexes
y / o RewriteBase /
agregando un #
anterior. Este último ya está desactivado en Joomla 3.5. Una configuración de RewriteBase
es útil cuando Joomla se instala en una subcarpeta, no en la raíz web.
En otros servidores, establezca Use URL Rewriting
en No
No puedo reproducir su problema, todo funciona correctamente con esas dos ediciones de código. Inténtelo de nuevo y, si no puede resolverlo, publique el comportamiento exacto (urls, errores también). Si no puede solucionarlo, es posible que deba volver a instalar las fuentes.
Tengo un sitio Joomla 3.3.6
(editado: 3.5.
) Organizado en solo 3 niveles:
- Cuatro grandes categorías (i, ii, iii, iiii)
- Cada una dividida en algunas categorías intermedias (A, B, C, ...)
- Y finalmente articulos
- Dos idiomas (en, pt)
La URL
después de configurar las Adds Suffix to URL
multilanguage support
Search Engine Friendly URLs
, Use URL rewriting
, Adds Suffix to URL
y el multilanguage support
, debe estar en la forma:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
Pero como muchos otros que tienen Joomla instalado y piden una solución desde la versión Joomla-Baby, obtuve:
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
donde 666 es un número del infierno que indica sin ningún propósito una identificación de categoría
Ahora buscando una respuesta, encontré esta respuesta:
Edit “components/com_content/router.php“
(You’ll probably have to re-do this step every time you update Joomla.)
Replace the lines 38 and 290 with:
$advanced = $params->get(''sef_advanced_link'', 1);
and Replace line 426 with
->where($db->quoteName(‘alias’) . ‘ = ‘ . $db->quote($segment));
Bueno, en primer lugar, la línea 426 ya es así en el original. En segundo lugar, esto no hace el truco. Funciona con:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
Pero se rompe con un error 404 si navega a:
http://www.example.com/en/bigcatiii/intercatA.html
Además, me di cuenta de que los números de identificación son diferentes. Mientras que toda la URL es
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
La misma página de descripción de categoría es
http://www.example.com/en/bigcatiii/333-intercatA.html
También hay otra solución que suena mejor, pero que tampoco funciona, basada en .htaccess
RewriteEngine on
RewriteBase /
RewriteRule (/d+)-([^/]*) $2 [R=301,L]
Las URLs
aparecen bien, pero las páginas no se encuentran. Sería mucho mejor si pudiéramos proporcionar una solución utilizando .htaccess en lugar de cambiar el núcleo de Joomla.
Sin embargo, cambiar el núcleo de Joomla estaría bien si esta otra sugerencia en Google fuera válida.
Copy “components/com_content/router.php” to “/templates/your-template/html”
Lo que significa que una vez que haya movido router.php
a su "local", no tendrá que rehacer todas las cosas después de una actualización. (A menos que, por supuesto, router.php se actualice, en caso de que sea mejor duplicarlo).
Gracias por su tiempo para resolver este rompecabezas!
Referencias
1- ¿Cambiar / Eliminar ID de artículo en URL?
2- Eliminación del número de ID del artículo
3- ¿Cómo eliminar el id del artículo en url?
4- Elimina el id del artículo de la url para joomla 3.0
6- Elimina la ID del artículo de la URL de joomla 3
7- Elimina la ID del artículo de la URL de joomla 3
8- .htaccess regla de redireccionamiento
Editado (2016 / May / 02): NUEVO Bounty para Joomla última versión 3.5
Después de verlo, encontré algunos datos útiles. DESCARGO DE RESPONSABILIDAD No uso Joomla y no he probado esto en una instalación que funciona, solo son los resultados de un código fuente de búsqueda y lectura. De todos modos, esto es lo que encontré.
De lo que he recogido, parece que cambiando.
$advanced = $params->get(''sef_advanced_link'', 0);
a
$advanced = $params->get(''sef_advanced_link'', 1);
debería ser suficiente. Sin embargo , tenga cuidado , con esta opción, probablemente ambas URL (con y sin ID) estarán disponibles, lo que no es bueno para SEO. El problema está en el 404, pero parece ser un problema con el sistema de enrutamiento Joomla. Podría compensar los 404 con enlaces de menú que solo están configurados pero nunca se usan (ver más abajo).
Algunos orígenes de su problema:
- Por ejemplo, en su enrutamiento, usan el menú para encontrar la identificación de la categoría (
Line ~385 // We get the category id from the menu item and search from there
) - Para cada segmento de URL (separados por la /), primero buscan alias de categorías, así que asegúrese de revisar sus alias. Si no pueden encontrar el alias en las categorías, confían en el ID en la URL para su consulta de búsqueda (
Line ~425 ->where($db->quoteName(''catid'') . '' = '' . (int) $vars[''catid''])
) - Cuando un ID de categoría o un ID de artículo se adjunta a un menú, eliminan la
$query[''catid'']
ID de categoría$query[''catid'']
porque saben que tienen un alias global único (Línea ~ 69)
Por lo tanto, una solución es hacer lo siguiente:
Puede intentar crear un elemento de menú para cada categoría y cada artículo. Incluso si el menú no se muestra en cualquier lugar y solo está configurado en la interfaz de administración, creará alias de enrutamiento únicos globales para categorías y artículos que permitirán a Joomla encontrar el artículo / categoría correcto. Por lo que entiendo, cuando una categoría o artículo tiene un elemento de menú, solo se utilizan los alias de título. Pero como no tienen ninguno, usan la combinación de id + slug para localizar el recurso.
Como muchas personas se quejan de esto, debería solucionarse en Joomla 3.5
Referencias y discusiones:
- Un blog con algunas soluciones y explicaciones sobre este tema: http://developernote.com/2012/05/how-to-remove-id-from-url-in-joomla-2-5/
- Un hilo del foro de joomla que discute su problema y sus soluciones: http://forum.joomla.org/viewtopic.php?f=712&t=826165&start=30
- Tal vez algún complemento resuelva este problema: http://extensions.joomla.org/extensions/site-management/sef
Para terminar con una nota brillante, parece que los desarrolladores están conscientes de las limitaciones ;)