Perché i permalink funzionano con /index.php/%postname% ma non con solo %postname%?
Sto avendo un problema con i permalink di WordPress. Quando cambio i permalink in pretty permalinks ottengo solo errori 404 per le pagine. La cosa strana è che quando uso /index.php/%postname% i link delle pagine funzionano correttamente, ma ho bisogno di eliminare la parte index.php.
Ho letto riguardo alle modifiche da fare al file httpd.conf ma non riesco a trovare il file da nessuna parte. Il file htaccess è corretto per quanto ne so, eccolo qui sotto
# 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
Avete altre idee?
Grazie Emma

Avevo tutto il codice corretto nel file .htaccess
, ma è stato completamente sovrascritto dal file predefinito di Ubuntu /etc/apache2/apache2.conf
. Ho modificato la voce per /
e /var/www
da AllowOverride None
a AllowOverride All
, ho riavviato Apache e ora tutto funziona perfettamente.

La mia ipotesi è che mod_rewrite
non sia abilitato. A seconda del server che stai utilizzando, abilita mod_rewrite
.
Quindi, se sei su Linux, modifica manualmente /etc/apache2/sites-enabled/000-default
e cambia AllowOverride
da None
a All
(o dove si trova la directory del tuo sito).
Qui, ai punti 3 e 4 dovrebbero esserci le soluzioni per Windows.

Sto lavorando su un problema simile da ieri e alla fine ho trovato la mia soluzione.
1) Assicurati che il tuo file .htaccess abbia i permessi 666
2) Abilita il modulo mod_rewrite:
sudo a2enmod rewrite
3) Riavvia Apache:
sudo systemctl restart apache2
4) Imposta AllowOverride All per la directory pubblica in /etc/apache2/apache2.conf
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
5) Riavvia Apache:
sudo systemctl restart apache2
6) Vai alla dashboard di WordPress e modifica le impostazioni dei permalink (se sei su postname, cambia in plain, o viceversa). Visualizza il sito per verificare.
7) Torna alla dashboard e reimposta le impostazioni dei permalink come desideri.
8) Ripristina i permessi del file .htaccess a 644
Questo ha funzionato per me.

Per caso stai utilizzando Names.co.uk come tuo host?
Ho avuto lo stesso problema e dopo un paio d'ore di ricerche su Google ho scoperto che utilizzano un server Zeus - non Apache - e che non supporta la funzione Mod_ReWrite. Questo sembra spiegare i sintomi confusi. (Non avevo un file .htaccess - ma WordPress non segnalava alcun errore quando modificavo le preferenze dei permalink.)
Hanno una soluzione alternativa per Zeus, dettagliata qui:
http://www.names.co.uk/support/hosting/linux_hosting/1119-wordpress_rewrite_script.html
Mi rendo conto che sono passati un paio di mesi dal tuo post originale e probabilmente l'hai già risolto - ma per chiunque trovi questo messaggio in futuro, sarebbe una buona idea verificare se il tuo host utilizza Zeus o qualche altro server non-Apache.
Aggiornamento: Consulta il codice che ho pubblicato qui su una domanda simile

Ho combattuto con questo problema per un po' e oggi l'ho finalmente risolto. Ho scoperto che il mio mod_rewrite
non era abilitato tutto questo tempo. Ho trovato molto utile le informazioni su questo link.
Spiega tutto, da come verificare se mod_rewrite
è abilitato, e se non lo è - come abilitarlo. Spero che queste informazioni siano utili per chiunque sia nuovo a WP e abbia difficoltà con l'impostazione dei permalink ottimizzati.

Tutte le informazioni rilevanti dovrebbero far parte della tua risposta, in particolare la tua risposta non dovrebbe dipendere da link esterni, perché le informazioni presenti potrebbero scomparire e quindi la tua risposta diventerebbe più o meno inutile. Potresti per favore aggiungere le informazioni alla tua risposta - grazie.

Dopo aver aggiunto il mio contenuto, ho trovato un articolo che suggeriva di eliminare il file .htaccess, poi andare su Impostazioni/permalink e rimuovere index.php. L'articolo diceva che WordPress avrebbe mostrato un errore suggerendo di creare il file .htaccess. Ho deciso di provare ma non è successo nulla. Quello che ho scoperto è che i miei permalink continuavano a funzionare anche con il file .htaccess eliminato. All'inizio questo mi ha lasciato perplesso. Ho aperto il mio client FTP e ho navigato tra i miei file. Ho notato che c'era ancora un file .htaccess nonostante l'avessi cancellato. Non so se sia stato WordPress, il mio account di hosting o cosa esattamente a ricrearlo, ma so che questa è una novità. Prima non succedeva. Potresti provare questo metodo se tutto il resto fallisce.
Non sono riuscito a riprodurre il problema nella tua domanda quindi non sono sicuro al 100% che funzioni per te. Ma vale la pena provare.
Saluti, Jeremy Jared

Prova a sostituire il codice .htaccess con questo:
# -------------------------------------------------------------------------
# Opzioni del Motore di 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]
# Reindirizza 'www.tuosito.com/qualcosa/qualcosa/index.php'
# verso 'www.tuosito.com/qualcosa/qualcosa/'
RewriteRule ^/(.*)/index.php$ /$1/ [NC,P,R=301]
# -------------------------------------------------------------------------
# FINE REWRITES
# -------------------------------------------------------------------------
Avevo ancora le credenziali di accesso di un cliente per cui ho dovuto risolvere questo problema. Questo è ciò che ho usato per lui. Si tratta di un server IIS, non sono sicuro se questo influisca ma puoi provarlo. Buona fortuna, JJ

Penso che il tuo host utilizzi IIS (Internet Information Services). IIS utilizza "URL Rewrite
" e non "mod_rewrite
", quindi dai un'occhiata al Codex.
I permalink "belli" di solito richiedono mod_rewrite, e IIS (comune sui server Windows) non supporta mod_rewrite. (Se stai utilizzando Apache 2.0.54, su Windows, mod_rewrite potrebbe funzionare, a condizione che sia abilitato in apache\conf\httpd.conf.)

So che è troppo tardi per rispondere ora, ma se stai ancora cercando una soluzione; ecco un modo rapido per farlo:
Risolto - Come Rimuovere Index.php Dagli URL di WordPress Su IIS7?

Stavo riscontrando questo problema su Mac OSX e la seguente soluzione è stata molto utile. Sembra che di default i Mac non siano pronti per .htaccess e Apache ignorerà il file fino a quando alcuni file (specificati nei link qui sotto) non vengono modificati:
http://wordpress.org/support/topic/getting-pretty-permalinks-working-on-a-mac-105-server
Spero che possa aiutare!

Questo è per il server Apache: Prima controlla il tuo virtual host se stai usando quello predefinito, verifica che la directory root di WordPress abbia questo
<Directory ROOT_DIR_FOR_WORDPRESS>
php_admin_flag engine on
AllowOverride All
Order allow,deny
allow from all
RewriteEngine On
RewriteOptions Inherit
Require all granted
</Directory>
verifica che il file .htaccess nella root di WordPress abbia i permessi di lettura e scrittura (666) e 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
Abilita mod_rewrite (sudo a2enmod rewrite - per utenti Linux)
Ora aggiorna i permalink struttura personalizzata: /%postname%/
salva e controlla eventuali errori Ora dovrebbe funzionare
Il più delle volte il problema è che il tuo .htaccess viene sovrascritto dalle regole del virtual host

Benvenuto su WPSE. Dovresti fornire maggiori dettagli nella tua risposta per le persone che potrebbero non sapere di cosa stai parlando qui. Più dettagli sono sempre meglio, altrimenti ti ritroverai con persone che chiedono: "Dove trovo sudo nel pannello di amministrazione di WP?" (Inoltre, dovresti specificare altri dettagli, notando che questo potrebbe non funzionare in tutti i casi poiché a2enmod è un comando specifico per Debian.)
