[Resuelto] ¿Como puedo modificar la URL?

Iniciado por SrTrp, 23 Febrero 2020, 07:00 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Bueno eh visto sitios que tiene por ejemplo esto: sitio.com.mx/Menu/panel
¿como puedo hacer eso? lo normal seria sitio.com.mx/Menu/panel.php

@XSStringManolo

En los archivos de configuración de tu servidor.

#!drvy

Se llaman friendly URLs, consiste en usar url rewriting.

https://www.danielmorell.com/guides/htaccess-seo/user-friendly-urls/make-your-urls-seo-friendly


En tu caso si solo quieres convertir Menu/panel.php a Menu/panel, bastaria con quitar la extensión php.


https://stackoverflow.com/questions/4908122/removing-the-php-extension-with-mod-rewrite


Saludos

mr-medi

Tambien puedes crear tus propias urls para que apunten a un fichero, por ejemplo pongamos que cuando un usuario haga una peticion GET a  "/Menu/panel" desde php vamos a mostrar el fichero "panel.php".

Si algún día usas algún framework se usa mucho lo de crear tus propias urls.De hecho una de las formas de saber si una pagina usa un framework o no es fijarse en las rutas que utiliza.

Lo que te comente antes usando el framework Laravel seria asi:
Fichero donde almacenas todas las rutas de tu aplicación que en Laravel es "web.php"

web.php
Código (php) [Seleccionar]

<?php
//Peticion GET que apunta al metodo 'getPanel' del Controlador 'MenuController'
Route::get('/Menu/panel''MenuController@getPanel');


Después tendrás en otro fichero php el controlador "MenuController", que se encarga de recibir todas las peticiones y gestionar la lógica de tu aplicación:

MenuController.php
Código (php) [Seleccionar]

<?php
namespace App\Http\Controllers;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Str;

class 
MenuController extends Controller
{
     public function 
getPanel()
     {
            
//Devuelves una vista con ese fichero
            //'menu' indica el nombre de la carpeta donde guardamos las vistas a mostrar y 
           // 'panel' el nombre del fichero
            
return view('menu.panel');
     }
}


Y por ultimo solo nos queda crear las vistas que es lo que se muestra al usuario, en este caso tendremos una carpeta llamada "menu" con un fichero "panel.blade.php"

Asi cuando el usuario ponga la  url "sitio.com.mx/Menu/panel" en su navegador(que es el método GET) se mostrara el contenido del fichero "panel.blade.php" .

Si te mola el tema aquí te dejo enlaces sobre la clase "Route" de php y la documentación de Laravel.
https://codereview.stackexchange.com/questions/120587/php-route-class
https://laravel.com/docs/6.x

<?php
       header
("Location: TheHackerWay");

@XSStringManolo

Casi siempre que se tenga dudas entre hacer algo utilizando la configuración del servidor y hacerlo en php, suele ser mucho más óptimo hacerlo modificando los archivos del servidor.

mr-medi

Cita de: @XSStringManolo en 28 Febrero 2020, 03:14 AM
Casi siempre que se tenga dudas entre hacer algo utilizando la configuración del servidor y hacerlo en php, suele ser mucho más óptimo hacerlo modificando los archivos del servidor.
Pero en este caso podemos encontrarnos con que sea una ruta personalizada y que no tenga nada que ver con la estructura de directorios del servidor. Por ejemplo ahora me encuentro haciendo una pagina web de retos a lo CTF y las rutas que tengo son las siguientes:
A la hora de especificar las rutas vereis unos '{}', son unos parametros que se pasan por la url de modo que desde el controlador podemos obtenerlos y filtrar resultados.
Código (php) [Seleccionar]

//RETOS
//Muestra todos los usuarios que han completado esos retos
Route::get('retos/validations/{reto}','RetoController@getValidations');//Ej:http://mypage.com/retos/validations/Nombre-Reto
//Pagina principal que muestra todas las categorias disponibles
Route::get('retos','RetoController@getRetos');;//Ej:http://mypage.com/retos
//Pagina con un formulario para crear reto
Route::get('retos/crear','RetoController@getCrear');;//Ej:http://mypage.com/retos/crear
//Enviando datos para crear reto
Route::post('retos/crear','RetoController@postCrear');;//Peticion POST para crear un nuevo reto
//Obtiene todos los retos de una categoria
Route::get('retos/{categoria}','RetoController@getRetosCategoria');;//Ej:http://mypage.com/retos/reversing
//Muestra un reto especifico
Route::get('retos/{categoria}/{reto}','RetoController@getReto');//Ej:http://mypage.com/reversing/nombre-reto

Tomando como referencia el ultimo reto no tendria sentido crear esa estructura de directorios sino que en base a esos parametros puede obtener los datos de ese reto y mostrarselos al usuario en una vista.
El metodo 'getReto' del controlador 'RetoController' es el siguiente, fijaos que recibe los dos parametros pasados en la ruta.
Código (php) [Seleccionar]

public function getReto($categoria,$reto)
    {
      $idReto =
      Project::where('nombre',$reto)
      ->pluck('id')
      ->all()[0];

      return view('retos.mostrar',
      array('reto' => Project::findOrFail($idReto)));
    }

Y ya en la vista mostramos el reto que hemos pasado en el array

<?php
       header
("Location: TheHackerWay");