Dezactivare reguli de rescriere WordPress în htaccess pentru folder și conținutul său

4 mar. 2011, 17:18:00
Vizualizări: 19.8K
Voturi: 5

Am o altă aplicație PHP într-un folder numit app în interiorul instalării WordPress și trebuie să dezactivez toate regulile de rescriere WordPress pentru acel folder și conținutul său. Astfel încât atunci când accesez www.domain.com/app să obțin pagina aplicației mele, în loc de pagina standard WordPress 404.

Știu că acestea sunt reguli de rescriere Apache de bază și am căutat soluții, am încercat câteva variante dar nu au funcționat bine.

Aproape am uitat, trebuie să fac asta doar prin editarea fișierului htaccess WordPress. Iar aplicația are propriul său fișier htaccess.

Mulțumesc.

EDIT: conținut htaccess

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

EDIT: htaccess-ul Aplicației

DirectoryIndex index.php
<FilesMatch "\.(php|inc)$">
Order allow,deny
deny from all
</FilesMatch>
<FilesMatch "(index.php|download.php)$">
Order allow,deny
allow from all
</FilesMatch>

Aceste reguli nu fac mare lucru, ele neagă accesul la toate fișierele de tip PHP și INC, cu excepția index.php și download.php. Acestea sunt cele pe care utilizatorul trebuie să le acceseze, restul fiind clase utilizate intern de PHP.

EDIT 3: Rezolvare:

După cum s-a dovedit, nu era nimic în neregulă cu fișierul htaccess WordPress sau cu aplicația. După activarea raportării erorilor pe serverul de hosting, PHP a raportat un fișier corupt, iar odată înlocuit, totul a început să funcționeze corect. Mulțumesc lui Wietse Venema pentru sugestie.

8
Comentarii

@Fábio: Poți să ne dai și regulile .htaccess din aplicație? Este o aplicație publică sau este dezvoltată pe un framework public (ceva pe care îl putem cunoaște)?

Jan Fabry Jan Fabry
4 mar. 2011 18:36:37

@Jan Fabry: Sigur, într-o secundă. Aplicația nu folosește niciun Framework, a fost construită de la zero, doar de distracție și pentru a păstra obiceiuri bune.

Fábio Antunes Fábio Antunes
4 mar. 2011 19:05:18

dacă accesezi www.domain.com/app/index.php, primești și tu eroarea 404 de la Wordpress?

Wietse Venema Wietse Venema
4 mar. 2011 20:19:17

@Wietse Venema: Orice altă locație în interiorul directorului 'app' returnează eroarea Wordpress 404, iar în cazul index.php, primesc doar un răspuns gol. Ca și cum nu ar fi nimic în fișier pentru procesare.

Fábio Antunes Fábio Antunes
4 mar. 2011 20:48:07

Doar pentru a fi sigur; dacă adaugi un fișier static test.html cu ceva text în directorul app/, primești tot eroarea Wordpress 404?

Wietse Venema Wietse Venema
4 mar. 2011 22:50:07

Nicio eroare. Fișierul este încărcat. Interesant, se pare că în directorul meu app PHP nu este executat.

Fábio Antunes Fábio Antunes
4 mar. 2011 23:12:36

Este posibil ca acesta să fie de fapt executat, dar să arunce o eroare pe care nu o vezi. Încearcă să citești jurnalul de erori sau pune ini_set('display_errors', 1); error_reporting(E_ALL); imediat după deschiderea <? din index.php.

Wietse Venema Wietse Venema
4 mar. 2011 23:38:24

@Wietse Venema: Eram atât de confortabil dezvoltând și urmărind cum funcționează pe mașina mea locală, încât nu m-am gândit că ceva ar putea fi greșit. Odată ce am activat raportarea erorilor pe serverul gazdă, acesta a raportat un fișier corupt (probabil în timpul încărcării prin FTP), odată înlocuit, a început să funcționeze așa cum ar trebui. Mulțumesc.

Fábio Antunes Fábio Antunes
5 mar. 2011 00:56:56
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 1
1

Fișierul implicit .htaccess va suporta deja comportamentul dorit;

# 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

Magia se află în liniile care încep cu RewriteCond. Acestea instruiesc Apache să aplice regula RewriteRule . /index.php [L] (ceea ce înseamnă "orice URL va merge către index.php"), doar atunci când URL-ul nu este un fișier existent !-f sau un director existent !-d.

Deci, acest lucru ar trebui să funcționeze implicit. Regulile de rescriere Wordpress nu se aplică atunci când încercați să accesați un fișier deja existent.

4 mar. 2011 17:55:13
Comentarii

Desigur, dacă aplicația folosește și rescrieri pentru a mapa URL-uri care nu există către ea însăși, acest lucru nu va funcționa. Atunci ai nevoie de o condiție specifică care să indice că URL-ul nu trebuie să înceapă cu app/.

Jan Fabry Jan Fabry
4 mar. 2011 18:35:03