¿Por qué los enlaces permanentes funcionan con /index.php/%postname% pero no solo con %postname%?
Tengo un problema con los enlaces permanentes de WordPress. Cuando cambio a enlaces permanentes bonitos solo obtengo errores 404 en las páginas. Lo extraño es que cuando uso /index.php/%postname% los enlaces funcionan bien, pero necesito eliminar la parte de index.php.
Leí sobre hacer cambios en el archivo httpd.conf pero no puedo encontrar el archivo en ninguna parte. El archivo htaccess es correcto por lo que he podido averiguar, está a continuación
# 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
¿Alguna otra idea?
Gracias Emma

Tenía todo el código correcto en el archivo .htaccess
, pero terminó siendo completamente sobrescrito en el archivo por defecto de Ubuntu /etc/apache2/apache2.conf
también. Cambié la entrada para /
y /var/www
de AllowOverride None
a AllowOverride All
, reinicié Apache y ahora todo funciona correctamente.

Mi suposición es que mod_rewrite
no está habilitado. Dependiendo del servidor que estés utilizando, habilita mod_rewrite
.
Luego, si estás en Linux, edita manualmente /etc/apache2/sites-enabled/000-default
y cambia AllowOverride
de None
a All
(o donde esté el directorio de tu sitio).
Aquí, en los puntos 3 y 4 deberían estar las soluciones para Windows.

He estado trabajando en un problema similar desde ayer y finalmente encontré mi solución.
1) Asegúrate de que tu archivo .htaccess tenga permisos 666
2) Habilita el módulo mod_rewrite:
sudo a2enmod rewrite
3) Reinicia apache:
sudo systemctl restart apache2
4) Configura AllowOverride All para el directorio público en /etc/apache2/apache2.conf
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
5) Reinicia apache:
sudo systemctl restart apache2
6) Ve al panel de control de WordPress y cambia la configuración de enlaces permanentes (si estás en "nombre de entrada", cámbialo a "simple", o viceversa). Visualiza el sitio para comprobarlo.
7) Regresa al panel de control y cambia la configuración de enlaces permanentes a la que desees.
8) Revertir los permisos del archivo .htaccess a 644
Esto funcionó para mí.

¿Estás usando por casualidad Names.co.uk como tu proveedor de alojamiento?
Acabo de tener el mismo problema que tú, y después de un par de horas buscando en Google descubrí que usan un servidor Zeus - no Apache - y no soporta la función Mod_ReWrite. Esto parece explicar los síntomas confusos. (Yo no tenía archivo .htaccess - pero WordPress no reportaba errores cuando hacía cambios en mis preferencias de enlaces permanentes).
Tienen una solución alternativa para Zeus, detallada aquí:
http://www.names.co.uk/support/hosting/linux_hosting/1119-wordpress_rewrite_script.html
Me doy cuenta de que esto es un par de meses después de tu publicación original y probablemente ya lo hayas resuelto - pero para cualquiera que encuentre esto en el futuro, sería una buena idea verificar si tu proveedor usa Zeus u otro servidor que no sea Apache.
Actualización: Por favor revisa el código que publiqué aquí en una pregunta similar

He estado lidiando con este problema por un tiempo, y hoy finalmente lo resolví. Descubrí que mi mod_rewrite
no estaba habilitado todo este tiempo. Encontré la información en este enlace muy útil.
Explica todo, desde cómo verificar si el mod_rewrite
está habilitado, y si no lo está, cómo habilitarlo. Espero que esta información sea útil para cualquiera que sea nuevo en WordPress y esté luchando con la configuración de los enlaces permanentes (pretty permalinks).

Toda la información relevante debe ser parte de tu respuesta, especialmente tu respuesta no debería depender de enlaces externos, porque la información allí podría desaparecer y entonces tu respuesta sería más o menos inútil. Así que, por favor, ¿podrías agregar la información a tu respuesta? - gracias.

Después de agregar mi contenido, encontré un artículo que sugería eliminar el archivo .htaccess, luego ir a Configuración/enlaces permanentes y eliminar el index.php. El artículo decía que WordPress daría un error sugiriendo que crees el archivo .htaccess. Decidí probarlo pero no hizo nada. Lo que sí descubrí es que mis enlaces permanentes seguían funcionando con el archivo .htaccess eliminado. Esto me desconcertó al principio. Abrí mi cliente FTP y navegué hasta mis archivos. Noté que había un archivo .htaccess allí después de haberlo eliminado. No sé si fue WordPress, mi cuenta de alojamiento o qué exactamente lo creó, pero sé que esto es nuevo. Esto no ocurría antes. Podrías probar este método si todo lo demás falla.
No pude recrear el problema en tu pregunta, así que no estoy 100% seguro de que funcione para ti. Pero vale la pena intentarlo.
Saludos, Jeremy Jared

Prueba reemplazando el código .htaccess con este:
# -------------------------------------------------------------------------
# Opciones del Motor de Rewrite
# -------------------------------------------------------------------------
RewriteEngine On
RewriteCompatibility2 On
RepeatLimit 200
RewriteBase
RewriteRule ^/index.php$ / [NC,P,R=301]
RewriteCond %{REQUEST_URI} !/wp-admin
RewriteRule ^/(.*)/$ /index.php/$1 [NC]
# Redirige 'www.tublog.com/alguna-ruta/alguna-pagina/index.php'
# a 'www.tublog.com/alguna-ruta/alguna-pagina/'
RewriteRule ^/(.*)/index.php$ /$1/ [NC,P,R=301]
# -------------------------------------------------------------------------
# FIN DE LAS REWRITES
# -------------------------------------------------------------------------
Todavía tenía las credenciales de acceso de un cliente para el que tuve que solucionar esto. Esto es lo que usé para él. Es un servidor IIS, no estoy seguro si eso importa pero puedes probarlo.
Buena suerte,
JJ

Creo que tu hosting utiliza IIS (Internet Information Services). IIS usa "URL Rewrite
" en lugar de "mod_rewrite
", así que revisa el Codex.
Los enlaces permanentes "bonitos" (pretty permalinks) generalmente requieren mod_rewrite, y IIS (común en servidores Windows) no soporta mod_rewrite. (Si estás usando Apache 2.0.54 en Windows, mod_rewrite podría funcionar, siempre y cuando esté habilitado en apache\conf\httpd.conf).

Sé que es muy tarde para responder ahora, pero si todavía estás buscando esto; aquí hay una forma rápida de hacerlo:
Resuelto: ¿Cómo eliminar index.php de la URL de WordPress en IIS7?

Estaba teniendo este problema en Mac OSX y lo siguiente fue muy útil. Parece que por defecto los Mac no están preparados para .htaccess y Apache ignorará el archivo hasta que se modifiquen ciertos archivos (especificados en los enlaces a continuación):
http://wordpress.org/support/topic/getting-pretty-permalinks-working-on-a-mac-105-server
¡Espero que ayude!

Esto es para servidor Apache: Primero verifique su host virtual si está usando el predeterminado, verifique que el directorio raíz de WordPress tenga esto:
<Directory DIRECTORIO_RAIZ_PARA_WORDPRESS>
php_admin_flag engine on
AllowOverride All
Order allow,deny
allow from all
RewriteEngine On
RewriteOptions Inherit
Require all granted
</Directory>
Verifique que su archivo .htaccess en la raíz de WordPress tenga permisos de lectura y escritura (666) y contenga:
# 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
Habilite el módulo rewrite (sudo a2enmod rewrite - para usuarios de Linux)
Ahora actualice los enlaces permanentes estructura personalizada: /%postname%/
Guarde y verifique si hay errores Ahora debería estar funcionando
La mayoría de las veces el problema es que su .htaccess es sobrescrito por las reglas de su host virtual

Bienvenido a WPSE. Deberías incluir más detalles en tu respuesta para aquellas personas que quizás no sepan de qué estás hablando aquí. Más detalles siempre son mejores, de lo contrario te encontrarás con preguntas como: "¿Dónde encuentro sudo en el panel de administración de WordPress?" (Además, deberías mencionar otros aspectos específicos, señalando que esto puede no funcionar en todos los casos, ya que a2enmod es un comando específico de Debian).
