¿Cómo eliminar la extensión de archivo de la dirección del sitio web?


Estoy diseñando un sitio web. Quiero que la dirección de mi sitio web se vea como la siguiente imagen:

extensiones de nombre de archivo como (PHP / JSP) están ocultas

No quiero que mi sitio web se vea como http://something.com/profile.php Quiero que la extensión .php se elimine en la barra de direcciones cuando alguien abra mi sitio web. En otras palabras, quiero que mi sitio web sea como: http://something.com/profile

Como segundo ejemplo, puede ver la propia dirección del sitio web de StackOverflow.

¿Puede alguien por favor ayudarme ¿en hacer esto? ¡Gracias!

Author: Vadim Kotov, 2011-06-30

10 answers

Basta con añadir .archivo htaccess a la carpeta raíz de su sitio (por ejemplo, /home/domains/domain.com/htdocs/) con el siguiente contenido:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
 68
Author: Igor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-30 12:45:48

Primero, verifique que el módulo mod_rewrite esté instalado. Luego, tenga cuidado de entender cómo funciona, muchas personas lo entienden al revés.

Usted no oculta urls o extensiones. Lo que haces es crear una NUEVA url que dirija a la antigua, por ejemplo

La URL para poner en su sitio web será yoursite.com/play?m=asdf

O mejor aún

Yoursite.com/asdf

Aunque el directorio asdf no exista. Entonces con mod_rewrite instalado pones esto en .htaccess. Básicamente dice, si la URL solicitada NO es un archivo y NO es un directorio, dirigirlo a mi script:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /play.php [L] 

Casi terminado - ahora solo tiene que escribir algunas cosas en su script PHP para analizar la nueva URL. Quieres hacer esto para que los ANTIGUOS también funcionen - lo que haces es mantener un sistema por el cual la variable es siempre exactamente la misma O crear una tabla de base de datos que correlacione la "URL amigable con SEO" con el id del producto. Un ejemplo podría ser

/ Some-Cool-Video (que equivale a ID de producto asdf)

La ventaja de esto? Los motores de búsqueda indexarán las palabras clave " Some Cool Video."asdf? ¿Quién va a buscar eso?

No puedo darle detalles de cómo programar esto, pero tome la cadena de consulta, quite el final

yoursite.com/Some-Cool-Video 

Se convierte en" asdf "

Luego establezca la variable m en este

M = asdf

Así que ambas URL seguirán yendo al mismo producto

yoursite.com/play.php?m=asdf 
yoursite.com/Some-Cool-Video 

Mod_rewrite puede hacer muchas otras cosas importantes también, búscalo en Google y haz que se active en tu servidor (probablemente ya esté instalado.)

Referencia: http://www.scriptscoop2.com/t/1a0c2b81484d/php-how-to-remove-file-extension-from-website-address.html

 12
Author: Shiv Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-11 07:57:47

Tienes diferentes opciones. Uno de ellos es crear una carpeta llamada "perfil" y cambiar el nombre de su "perfil.php" a "por defecto.php "y ponerlo en la carpeta "profile". y usted puede dar órdenes a esta página de esta manera:

Página antigua: http://something.com/profile.php?id=a&abc=1

Nueva página: http://something.com/profile/?id=a&abc=1

Si no está satisfecho deje un comentario para métodos complicados.

 4
Author: Iman Hejazi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-30 12:47:26

El problema de crear un directorio y mantener el índice.php en él es que

  1. sus enlaces con el menú dejarán de funcionar
  2. habrá demasiados directorios. Por ejemplo, habrá un directorio separado para todas y cada una de las preguntas aquí en stackoverflow

Las soluciones son 1. MOD REESCRITURA (como se sugirió anteriormente) 2. utilice un código php para incluir dinámicamente otros archivos en el archivo de índice. Lea un poco más sobre esto aquí http://inobscuro.com/tutorials/read/16 /

 2
Author: Rahul Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-14 07:27:43

Aquí hay una forma simple de PHP que uso.
Si se solicita una página con el .extensión php entonces una nueva petición es hecha sin el .extensión php. El .la extensión php ya no se muestra en el campo de dirección del navegador.

Se me ocurrió esta solución porque ninguno de los muchos .las sugerencias de htaccess funcionaron para mí y fue más rápido implementar esto en PHP que intentar averiguar por qué .htaccess no funcionó en mi servidor.

Ponga esto al principio de cada archivo PHP (preferentemente antes que cualquier otra cosa):

include_once('scripts.php');  
strip_php_extension();  

Luego coloque estas funciones en los scripts del archivo.php":

//==== Strip .php extension from requested URI  
function strip_php_extension()  
{  
  $uri = $_SERVER['REQUEST_URI'];  
  $ext = substr(strrchr($uri, '.'), 1);  
  if ($ext == 'php')  
  {  
    $url = substr($uri, 0, strrpos($uri, '.'));  
    redirect($url);  
  }  
}  

//==== Redirect. Try PHP header redirect, then Java, then http redirect
function redirect($url)  
{  
  if (!headers_sent())  
  {  
    /* If headers not yet sent => do php redirect */  
    header('Location: '.$url);  
    exit;  
  }  
  else  
  {
    /* If headers already sent => do javaScript redirect */  
    echo '<script type="text/javascript">';  
    echo 'window.location.href="'.$url.'";';  
    echo '</script>';  

    /* If javaScript is disabled => do html redirect */  
    echo '<noscript>';  
    echo '<meta http-equiv="refresh" content="0; url='.$url.'" />';  
    echo '</noscript>';  
    exit;  
  }  
}  

Obviamente, todavía necesita configurar Apache para redirigir cualquier solicitud sin extensión al archivo con la extensión. La solución anterior simplemente comprueba si el URI solicitado tiene una extensión, si lo hace solicita el URI sin la extensión. Luego Apache hace el redireccionamiento al archivo con la extensión, pero solo el URI solicitado (sin la extensión) se muestra en el campo de dirección del navegador. La ventaja es que todos sus enlaces "href" en su código todavía pueden tener el nombre de archivo completo, es decir, incluyendo el .extensión php.

 2
Author: Tony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-15 14:52:38

En realidad, la forma más sencilla de manipular esto es

  1. Abra una nueva carpeta en su servidor, por ejemplo, "Data"
  2. Poner índice.php (or index.html) en it

Y luego la URL www.yoursite.com/data leerá ese índice.archivo php. Si quieres ir más lejos, abre una subcarpeta (por ejemplo, "Lista") en ella, pon otro índice.php en esa carpeta y usted puede tener www.yoursite.com/data/list ejecuta ese archivo PHP.

De esta manera usted puede tener control total sobre esto, muy útil para SEO.

 1
Author: Dan Horvat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-01 13:00:19

Igual que Igor pero debe funcionar sin la línea 2:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
 1
Author: Jon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-18 10:19:03

Elimina la extensión de un archivo.htaccess

URL original: http://ravinderrathore.herobo.com/contact.php

Regla de Htaccess a eliminar .php, .html, etc. extensión de archivo desde url.

RewriteRule ^(.*)$ $1.php

After Rewriting: http://ravinderrathore.herobo.com/contact

RewriteEngine on

RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/

RewriteRule ^index(.*)?$ index.php$1 [L,QSA]

RewriteRule ^login_success(/)?$ login_success.php [L,QSA]

RewriteRule ^contact(/)?$ contact.php [L,QSA]
 1
Author: Ravinder Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-17 12:07:32

Tony, tu script está bien, pero si tienes 100 archivos? Necesita agregar este código en todos estos :

Include_once('scripts.php');
strip_php_extension ();

Creo que incluye un menú en cada archivo php (probablemente su menú se muestra en todas sus páginas web), por lo que puede agregar estas 2 líneas de código solo en su archivo de menú. Este trabajo para mí: D

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-21 08:42:59

Casi lo mismo con la primera respuesta sobre, pero algo más de ventaja.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Simplemente agregue si tiene otra extensión de archivo en sus sitios

 0
Author: Võ Minh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-28 06:06:10