De ce permalink-urile funcționează cu /index.php/%postname% dar nu doar cu %postname%?
Am o problemă cu permalink-urile WordPress. Când schimb permalink-urile în permalink-uri prietenoase primesc erori 404 pentru pagini. Ciudat este că atunci când folosesc /index.php/%postname% link-urile paginilor funcționează bine, dar am nevoie să scap de partea cu index.php.
Am citit despre modificări în fișierul httpd.conf dar nu pot găsi fișierul nicăieri. Fișierul htaccess pare corect din ce am putut verifica, îl puteți vedea mai jos
# 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
Aveți alte idei?
Mulțumesc Emma

Am avut tot codul corect în fișierul .htaccess
, dar a fost complet suprascris în fișierul implicit Ubuntu /etc/apache2/apache2.conf
. Am schimbat intrarea pentru /
și /var/www
din AllowOverride None
în AllowOverride All
, am repornit Apache și acum totul funcționează perfect.

Presupun că mod_rewrite
nu este activat. În funcție de serverul pe care îl utilizați, activați mod_rewrite
.
Apoi, dacă sunteți pe Linux, editați manual /etc/apache2/sites-enabled/000-default
și schimbați AllowOverride
de la None
la All
(sau în directorul în care se află site-ul dvs.).
Aici, la punctele 3 și 4 ar trebui să găsiți soluții pentru Windows.

Am lucrat la o problemă similară de ieri și în sfârșit am găsit soluția.
1) Asigură-te că fișierul .htaccess are permisiunea 666
2) Activează mod_rewrite:
sudo a2enmod rewrite
3) Repornește Apache:
sudo systemctl restart apache2
4) Adaugă AllowOverride All pentru directorul public în /etc/apache2/apache2.conf
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
5) Repornește Apache:
sudo systemctl restart apache2
6) Mergi în panoul de control WordPress și schimbă setările de permalink (dacă ai pe postname, schimbă la plain sau invers). Verifică site-ul.
7) Revino în panoul de control și schimbă setările de permalink la cele dorite.
8) Revenire la permisiunea 644 pentru .htaccess
Aceasta a funcționat pentru mine.

Folosești cumva Names.co.uk ca furnizor de hosting?
Am avut aceeași problemă ca tine și, după câteva ore de căutări pe Google, am aflat că ei folosesc un server Zeus - nu Apache - și acesta nu suportă funcția Mod_ReWrite. Aceasta pare să explice simptomele confuze. (Nu aveam fișier .htaccess - dar nici erori raportate de WordPress când schimbam preferințele pentru legături permanente.)
Ei au o soluție alternativă pentru Zeus, detaliată aici:
http://www.names.co.uk/support/hosting/linux_hosting/1119-wordpress_rewrite_script.html
Îmi dau seama că au trecut câteva luni de la postarea ta inițială și probabil ai rezolvat deja problema - dar pentru oricine va găsi asta în viitor, ar fi bine să verifice dacă furnizorul de hosting folosește Zeus sau alt server non-Apache.
Actualizare: Te rog să consulți codul pe care l-am postat aici la o întrebare similară

Am luptat cu această problemă de ceva timp și astăzi am reușit să o rezolv. Am descoperit că modulul meu mod_rewrite
nu a fost activat toată această perioadă. Informațiile de pe acest link mi-au fost foarte utile.
Explică totul, de la cum să verifici dacă mod_rewrite
este activat, și dacă nu - cum să-l activezi. Sper că aceste informații sunt utile pentru oricine este nou în WordPress și se confruntă cu setarea permalinkurilor prietenoase.

Toate informațiile relevante ar trebui să facă parte din răspunsul tău, în special răspunsul tău nu ar trebui să depindă de link-uri externe, deoarece informațiile de acolo ar putea dispărea și atunci răspunsul tău devine mai mult sau mai puțin inutil. Așadar, te rog să adaugi informațiile în răspunsul tău - mulțumesc.

După ce am adăugat conținutul meu, am găsit un articol care sugera ștergerea fișierului .htaccess, apoi mergând la Setări/permalinks și eliminând index.php. Articolul spunea că WordPress va afișa o eroare sugerând să creezi fișierul .htaccess. Am decis să încerc, dar nu a făcut nimic. Ceea ce am descoperit a fost că permalinkurile mele funcționau în continuare chiar și cu fișierul .htaccess șters. La început, asta m-a nedumerit. Am deschis clientul meu FTP și am navigat prin fișiere. Am observat că exista un fișier .htaccess acolo după ce l-am șters. Nu știu dacă este WordPress, Contul meu de Hosting sau ce anume l-a creat, dar știu că acest lucru este nou. Acest lucru nu s-a întâmplat înainte. Ai putea încerca această metodă dacă nimic altceva nu funcționează.
Nu am putut recrea problema din întrebarea ta, așa că nu sunt 100% sigur dacă funcționează pentru tine. Dar merită încercat.
Cu respect, Jeremy Jared

Încearcă să înlocuiești codul din .htaccess cu acesta:
# -------------------------------------------------------------------------
# Opțiuni pentru motorul de rescriere
# -------------------------------------------------------------------------
RewriteEngine On
RewriteCompatibility2 On
RepeatLimit 200
RewriteBase
RewriteRule ^/index.php$ / [NC,P,R=301]
RewriteCond %{REQUEST_URI} !/wp-admin
RewriteRule ^/(.*)/$ /index.php/$1 [NC]
# Redirecționează 'www.yourblogsite.com/anything/anything/index.php'
# către 'www.yourblogsite.com/anything/anything/'
RewriteRule ^/(.*)/index.php$ /$1/ [NC,P,R=301]
# -------------------------------------------------------------------------
# FINAL REGULI DE RESCRIERE
# -------------------------------------------------------------------------
Încă mai aveam datele de autentificare ale unui client pentru care a trebuit să rezolv această problemă. Asta am folosit pentru el. Este un server IIS, nu sunt sigur dacă contează, dar poți încerca. Mult noroc, JJ

Cred că gazda ta folosește IIS (Internet Information Services). IIS utilizează "URL Rewrite
" și nu "mod_rewrite
", așa că aruncă o privire în Codex.
"Pretty" permalink-urile necesită de obicei mod_rewrite, iar IIS (comun pe serverele Windows) nu suportă mod_rewrite. (Dacă folosești Apache 2.0.54 pe Windows, mod_rewrite poate funcționa, cu condiția să fie activat în apache\conf\httpd.conf.)

Știu că este prea târziu să răspund acum, dar dacă încă cauți o soluție; iată o metodă rapidă pentru asta:
Rezolvat - Cum să elimini index.php din URL-ul WordPress pe IIS7?

Am avut această problemă pe Mac OSX și următoarele informații au fost foarte utile. Se pare că implicit calculatoarele Mac nu sunt pregătite pentru .htaccess și Apache va ignora fișierul până când anumite fișiere (specificate în linkurile de mai jos) sunt modificate:
http://wordpress.org/support/topic/getting-pretty-permalinks-working-on-a-mac-105-server
Sper că acest lucru vă ajută!

Acest ghid este pentru serverul Apache: Salut, mai întâi verifică-ți gazda virtuală dacă folosești cea implicită, verifică dacă directorul rădăcină al WordPress conține următoarele:
<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>
Verifică dacă fișierul .htaccess din directorul rădăcină WordPress are permisiuni de citire și scriere (666) și conține următoarele:
# 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
Activează modulul rewrite (sudo a2enmod rewrite - pentru utilizatorii Linux)
Acum actualizează structura permanentă a linkurilor structură personalizată: /%postname%/
salvează și verifică dacă apar erori Acum ar trebui să funcționeze
De cele mai multe ori problema este că fișierul .htaccess este suprascris de regulile gazdei virtuale

Bine ați venit pe WPSE. Ar trebui să adăugați câteva detalii suplimentare în răspunsul dvs. pentru persoanele care ar putea să nu înțeleagă despre ce vorbiți aici. Mai multe detalii sunt întotdeauna mai bune, altfel veți primi întrebări de genul "Unde găsesc sudo în panoul de administrare WordPress?" (De asemenea, ar trebui să menționați alte detalii specifice, observând că acest lucru poate să nu funcționeze în toate cazurile, deoarece a2enmod este specific sistemelor Debian.)
