Configuración de WordPress con enlaces permanentes personalizados y ningún archivo .htaccess?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/994

  •  16-10-2019
  •  | 
  •  

Pregunta

Tengo un cliente que tiene una fuerte preferencia a los ficheros .htaccess desactivar porque les gusta establecer las configuraciones de Apache propiamente dichos. Sin embargo, todavía quieren URL SEO-friendly.

¿Hay una manera de tener vínculos permanentes personalizados con ningún archivo .htaccess? Mi investigación hasta la fecha parece indicar que esto no es posible, pero quizás uno de los desarrolladores brillantes sabe lo aparentemente imposible puede ser posible. Gracias de antemano!

¿Fue útil?

Solución

Hola @ Mike Lee

Para responder a su pregunta, es útil para entender cómo funciona todo.

Apache proporciona los URL que coinciden archivos y directorios

Apache está diseñado para servir archivos coincidentes explícitamente por el URL, o para servir al index.php que se encuentra en un directorio cuando el directorio se corresponde de forma explícita.

Pero Apache puede servir a las URL acompañado de expresiones regulares con mod_rewrite

Si quiere que Apache para que coincida con las direcciones URL de donde no hay directorios reales (en el caso de WordPress y enlaces permanentes bonitas), entonces debe tener alguna manera de decirle a Apache cómo manejar URL diferente. Y eso es exactamente lo que mod_rewrite fue diseñado para permitir; que proporciona a los administradores del servidor de la capacidad de reglas establecidas para las direcciones URL con las expresiones regulares. Aquellos reglas ruta el resultado a otras URL, a menudo incluyendo archivos realidad .PHP y algunas veces con parámetros de URL pasó. En última instancia, las normas especifican que los archivos reales se cargan.

Y mod_rewrite está configurado con cualquier .htaccess o httpd.conf

Para configurar mod_rewrite que sólo puede hacerlo dentro .htaccess o dentro del archivo httpd.conf o uno de los archivos que incluye, como potencialmente httpd-vhosts.conf. En realidad me sorprende si el cliente tiene las habilidades para controlar Apache que no lo saben ya.

WordPress siempre utiliza el mismo .htaccess simple de archivos

Pasando a lo que hace WordPress, al configurar los enlaces permanentes de WordPress escribe lo siguiente en el fichero de .htaccess, suponiendo que se puede escribir ( y en este primer ejemplo se asume que su sitio web se sirve de la raíz ) :

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Advertencia: cuando su delantero Guía de WordPress no es la raíz

Si su sitio está en su lugar sirve de /blog a continuación, el archivo .htaccess escrito se vería así:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

Rutas WordPress todos los no-Archivo / Directorio de direcciones URL a juego a index.php

Así como se puede ver, la cosa solamente usos WordPress .htaccess para es el mapeo de cualquier URL para el dominio de /index.php (o /blog/index.php en el segundo ejemplo) excepto cuando una URL coincide con un archivo real (como un / .jpg / imagen .gif .png, una hoja de estilo .css, un guión .js, etc.) o cuando coincide con un directorio real ( que hasta donde yo sé no es relevante en una instalación estándar de WordPress).

En PHP WordPress Analiza $_SERVER['REQUEST_URI'] para decidir qué carga

Dentro de su WordPress código PHP agarra el valor de $_SERVER['REQUEST_URI'] que contiene la solicitud de URL completa sans el dominio y el esquema (es decir esquema es http o https) y A continuación, analiza el valor para determinar cuál era el URL solicitó y por lo tanto lo que se debe cargar páginas.

Anulación .htaccess? Obtener Apache para cargar URL virtuales (pero buena suerte con eso!)

Así que si quieres alguna manera de derivación .htaccess su trabajo sería conseguir Apache para responder a una URL arbitraria a continuación, cargar WordPress y el conjunto $_SERVER['REQUEST_URI'] ser la ruta URL más los parámetros; OIA spoofing, pero en el buen sentido. Dicho esto, sé que si conocemos ninguna manera que no se complican demasiado para hacer eso.

incrustación /index.php/ (tal vez?!?)

A pesar de que Chris_O * * es correcta sobre anteponiendo /index.php/ a sus URL Me estremezco cada vez que veo eso. Se añade 10 caracteres para cada URL haciéndolas más largas y menos significativa para los motores de búsqueda, pero mucho peor hace menos compartible y se ve críptica a los usuarios. Lo sentimos Chris Sé que intención era buena, pero uf!

Crea real directorios para cada URL (tal vez?)

Una forma de obtener pretty enlaces permanentes sin tocar Apache sería escribir un script que generará un directorio real para cada URL que desee y luego almacenar una index.php hay que cargaría WordPress. Por supuesto que sería enorme esfuerzo para la pequeña beneficio y que requeriría el servidor para tener acceso de escritura que tiene que ser peor que el uso de un archivo .htaccess.

Odio admitirlo, pero esto es lo que hice alrededor del año 1998 con un sitio web basado en .ASP cuando IIS no apoyó la reescritura de URL (y aún hoy en día sigue siendo un verdadero PITA!) Fue un truco feo, era un dolor de Mantener y lo odiaba, pero las direcciones URL seguro estaban muy bien tanto para los usuarios como para SEO!

Mejor Solución? Añadir Reglas de reescritura a httpd.conf

Volver a lo que es probablemente su mejor la solución, y @Simon Brown en realidad recomendado; añadir sus reglas de reescritura de httpd.conf o uno de los archivos de inclusión como httpd-vhosts.conf Añadir la siguiente toma Directiva Asegúrese de cambiar el directorio para que coincida con el directorio para su sitio (que es como Apache está configurado en localhost en mi Mac.):

<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>

Bonus! Con Lockdown Comes Rendimiento Demasiado

Esta última opción debe eliminar cualquier nuevo el control .htaccess y poner en sus manos. Aún mejor es un poco más performante desde httpd.conf sólo se carga una vez cuando se inicia Apache pero archivos .htaccess se cargan y se analiza sintácticamente en cada solicitud de URL!

P.S. Una cosa más a tener en cuenta sería la de front-end Apache con un servidor de almacenamiento en caché como Nginx que creo que se está convirtiendo en una las mejores prácticas para los sitios de WordPress de alto tráfico que realmente necesitan ser performante. Puede ser que tome campo pellizcar verde porque no creo que la mayoría de la gente ha estado usando Nginx para hacer la reescritura de URL para Apache pero si que los intereses de dirección que aquí hay algunos enlaces para proseguir:

Otros consejos

Enlaces permanentes sin mod_rewrite

Sin un archivo .htaccess o modificar su archivo httpd.conf lo mejor que puede hacer es pathinfo enlaces permanentes. Pathinfo enlaces permanentes son los mismos que los enlaces permanentes bonitas excepto que comienzan con index.php.

Para usar pathinfo enlaces permanentes puso index.php / al inicio de su estructura de enlaces permanentes personalizado:

/index.php/%postname%/

Codex artículo para más información.

De vuelta en los viejos tiempos malos, WordPress necesaria para escribir un nuevo archivo de configuración cada vez que cambió la estructura de enlaces permanentes. En configuraciones modernas, los RewriteRules son inmutables:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Todas las solicitudes de archivos inexistentes (es decir. Una ruta de enlace permanente a medida que no coincide con un archivo en el sistema de archivos) se pasa a través de index.php, y le dice a PHP $_SERVER['REQUEST_URI'] lo que realmente se solicita. Su cliente puede establecer las reglas de reescritura en httpd.conf o .htaccess, y usted no tendrá que modificarlo como ajustar la estructura de enlaces permanentes.

Algunos plugins no intentan modificar .htaccess sí mismos, o que se haga para modificar el archivo. Esta solución no puede ser para todos, pero teniendo en cuenta lo que vale.

Licenciado bajo: CC-BY-SA con atribución
scroll top