Sí, leí el manual de Apache y busqué aquí. Por alguna razón, simplemente no puedo hacer que esto funcione. Lo más cerca que he estado es que elimine la extensión, pero apunta al directorio raíz. Quiero que esto funcione en el directorio que contiene el .htaccess
archivo.
Necesito hacer tres cosas con el .htaccess
archivo.
Lo necesito para eliminar el .php
a. Tengo varias páginas que usan pestañas y la URL se parece a page.php # pestaña, ¿es posible?
si. Tengo una página que usa un ID de sesión adjunto a la URL para asegurarme de que viene del lugar correcto
www.domain.com/download-software.php?abcdefg
.
es posible? También al hacer esto, ¿necesito eliminar ".php" de los enlaces en mi archivo de inclusión de navegación de encabezado? DeberíaIE "<a href="support.php">support</a>" be <a href="support">support</a>?
- Me gustaría forzar "www" antes de cada URL, así que no lo es
domain.com
, perowww.domain.com/page
. - Me gustaría eliminar todas las barras inclinadas de las páginas.
Seguiré buscando, intentando, etc. ¿Estar en un subdirectorio causaría algún problema?
Respuestas:
La respuesta de Gumbo en la pregunta de Stack Overflow Cómo ocultar la extensión .html con Apache mod_rewrite debería funcionar bien.
Re 1) Cambiar el .html a .php
Re a.) Sí, es posible, solo agréguelo
#tab
a la URL.Re b.) Eso es posible usando
QSA
(Query String Append), ver más abajo.Esto también debería funcionar en una ruta de subdirectorio:
fuente
[L,
espacio deQSA]
banderas, de lo contrario 500 Internal Server Error causará./index/bla/bla
sea lo mismo queindex.php
Apache mod_rewrite
Lo que estás buscando es mod_rewrite ,
En términos generales,
mod_rewrite
funciona haciendo coincidir el documento solicitado con expresiones regulares especificadas, luego realiza reescrituras de URL internamente (dentro del proceso de Apache) o externamente (en el navegador del cliente). Estas reescrituras pueden ser tan simples como traducir internamente example.com/foo en una solicitud para example.com/foo/bar.Los documentos de Apache incluyen una
mod_rewrite
guía y creo que en ella se tratan algunas de las cosas que desea hacer. Guía detallada de mod_rewrite .Forzar el
www
subdominioLa guía de reescritura incluye instrucciones para esto en el ejemplo de Canonical Hostname .
Eliminar barras inclinadas (parte 1)
No estoy seguro de por qué querría hacer esto, ya que la guía de reescritura incluye un ejemplo para exactamente lo contrario , es decir, siempre incluye una barra al final. Los documentos sugieren que eliminar la barra inclinada tiene un gran potencial para causar problemas:
¿Quizás podría explicar por qué desea eliminar la barra al final todo el tiempo?
Quitar
.php
extensiónLo más parecido a hacer esto que se me ocurre es reescribir internamente cada documento de solicitud con una extensión .php, es decir, example.com/somepage se procesa en su lugar como una solicitud para example.com/somepage.php. Tenga en cuenta que proceder de esta manera requeriría que cada alguna página exista realmente como alguna página.php en el sistema de archivos.
Con la combinación correcta de expresiones regulares, esto debería ser posible hasta cierto punto. Sin embargo, puedo prever algunos posibles problemas con las páginas de índice que no se solicitan correctamente y que no coinciden con los directorios correctamente.
Por ejemplo, esto reescribirá correctamente example.com/test como una solicitud para example.com/test.php:
Pero hará que example.com no se cargue porque no hay example.com/.php
Supongo que si está eliminando todas las barras inclinadas, elegir una solicitud para un índice de directorio de una solicitud para un nombre de archivo en el directorio principal será casi imposible. ¿Cómo se determina una solicitud para el directorio 'foobar':
desde una solicitud de un archivo llamado foobar (que en realidad es foobar.php)
Podría ser posible si usó la
RewriteBase
directiva. Pero si lo hace, este problema se complica mucho más, ya que necesitaráRewriteCond
directivas para verificar el nivel del sistema de archivos si la solicitud se asigna a un directorio o archivo.Dicho esto, si elimina el requisito de eliminar todas las barras diagonales finales y, en su lugar, fuerza la adición de barras diagonales finales, el problema de "sin extensión .php" se vuelve un poco más razonable.
Esto todavía no es perfecto: cada solicitud de un archivo todavía tiene .php agregado a la solicitud internamente. Una solicitud de 'hi.txt' pondrá esto en sus registros de errores:
Pero hay otra opción, configure las directivas
DefaultType
yDirectoryIndex
así:Actualización 14-11-2013: se corrigió el fragmento anterior para incorporar la observación de nicorellius
Ahora las solicitudes de hi.txt (y cualquier otra cosa) tienen éxito, las solicitudes a example.com/test devolverán la versión procesada de test.php y los archivos index.php volverán a funcionar.
Debo dar crédito a quien se debe el crédito por esta solución, ya que la encontré en el blog de Michael J. Radwins buscando en Google php sin extensión apache .
Eliminar barras al final
Algunas búsquedas
apache remove trailing slashes
me llevaron a algunas páginas de optimización de motores de búsqueda. Aparentemente, algunos sistemas de gestión de contenido (Drupal en este caso) harán que el contenido esté disponible con y sin una barra diagonal en las URL, lo que en el mundo del SEO hará que su sitio incurra en una penalización por contenido duplicado. FuenteLa solución parece bastante trivial, usando
mod_rewrite
reescribimos con la condición de que el recurso solicitado termine en a/
y reescriba la URL enviando el301 Permanent Redirect
encabezado HTTP.Este es su ejemplo que asume que su dominio es blamcast.net y permite que la solicitud tenga el prefijo opcionalmente
www.
.Ahora estamos llegando a alguna parte. Pongamos todo junto y veamos cómo se ve.
Obligatorio
www.
, no.php
y sin barras al finalEsto supone que el dominio es foobar.com y se ejecuta en el puerto estándar 80.
La bandera 'R' se describe en la
RewriteRule
sección de la directiva. Retazo:Nota final
No pude hacer que la eliminación de la barra oblicua funcionara correctamente. La redirección terminó dándome bucles de redirección infinitos. Después de leer la solución original más de cerca, tengo la impresión de que el ejemplo anterior les funciona debido a cómo está configurada su instalación de Drupal. Menciona específicamente:
En referencia a las URL que terminan con y sin barra. Además,
fuente
DirectoryIndex index index.html
? oDirectoryIndex index.php index.html
?Además de otras respuestas anteriores,
También puede intentar esto para eliminar completamente las extensiones .php de su archivo y evitar un bucle infinito :
Este código funcionará en Root / .htaccess. Asegúrese de cambiar RewriteBase si desea colocarlo en un archivo htaccess en el subdirectorio.
Editar:
En apache 2.4 y versiones posteriores, también puede usar el indicador END para evitar el error de bucle infinito. El siguiente ejemplo funciona igual que el anterior en apache 2.4,
fuente
El siguiente código funciona bien para mí:
fuente
Aquí hay un método si desea hacerlo para un solo archivo específico:
Ref: http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/
fuente
Después de cambiar el parámetro
AllowOverride
deNone
aAll
en/etc/apache2/apache2.conf
(Debian 8), a raíz de esto , el archivo .htaccess simplemente debe contener:Y fue suficiente para ocultar la extensión .php de los archivos.
fuente
MultiViews
hace esto de inmediato<a href="somepage.php">
enlace</a>
a<a href="somepage">
enlace</a>
en el código fuentePrueba esto
El siguiente código definitivamente funcionará
fuente
No estoy seguro de por qué las otras respuestas no funcionaron para mí, pero este código que encontré sí:
Eso es todo lo que está en mi htaccess y example.com/page muestra example.com/page.php
fuente
Para eliminar la extensión .php de un archivo PHP, por ejemplo, yoursite.com/about.php a yoursite.com/about Siga estos pasos. Abra el archivo .htaccess (cree uno nuevo si no existe) desde la raíz de su sitio web y agregue el siguiente código.
Para eliminar la extensión .html de un archivo html, por ejemplo, yoursite.com/about.html a yoursite.com/about Siga estos pasos.
Abra el archivo .htaccess (cree uno nuevo si no existe) desde la raíz de su sitio web y agregue el siguiente código.
Referencia: Cómo eliminar la extensión php de la URL
fuente
Si está codificando en PHP y desea eliminar .php para que pueda tener una URL como:
http://yourdomain.com/blah -> que apunta a /blah.php
Esto es todo lo que necesitas:
fuente
Encontré el concepto 100% funcional para mí:
Utilice este código en la raíz del archivo .htaccess de su sitio web como:
fuera de línea - wamp \ www \ YourWebDir
en línea - public_html /
fuente
RewriteRule
s con la etiquetaL
uno al lado del otro.[L]
dicemod_rewrite
que es la última regla para el especificadoRewriteCond
.Aquí está el código que usé para ocultar la
.php
extensión del nombre del archivo:Nota:
R=301
es para redireccionamiento permanente y se recomienda su uso con fines de SEO. Sin embargo, si uno solo quiere una redirección temporal, reemplácela con soloR
fuente
Terminé con el siguiente código de trabajo:
fuente
Si su URL en PHP como http://yourdomain.com/demo.php que viene como http://yourdomain.com/demo
Esto es todo lo que necesitas:
crear archivo .htaccess
fuente
http://example.com/myfile
pero no funcionó parahttp://example.com/myfolder/
(archivo de índice). ¿Pueden ayudarme a que funcione para el archivo de índice?Tratar
fuente