mod_rewrite dovrebbe servire i file che esistono nella radice del documento ma li sta ignorando


1

Ho sollevato gran parte di questo da Wordpress, quindi qualsiasi percorso sul dominio come dire /searcho /listè diretto a /index.php. Bene che funziona.

Tuttavia, non dovrebbe farlo se il file richiesto esiste nella radice del documento . Quindi, se chiedo /exists.php, dovrebbe eseguire quello script. Invece sta ignorando i file sul filesystem e continua a servire index.php.

<VirtualHost *:80>

  DocumentRoot /home/sites/dev
  ServerName dev.vbox

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule . /index.php

  ErrorLog /var/log/apache2/dev.error.log

</VirtualHost>

Ho esaminato la documentazione di mod_rewrite e vari risultati di ricerca di Google, ma non vedo nulla di sbagliato nelle mie condizioni di riscrittura. Se il nome file richiesto è un file o una directory, non reindirizzare a /index.php.

Ho cdil root del documento e elencato il contenuto di quella directory, il file che sto richiedendo esiste. Il mio registro di accesso di Apache contiene voci per /exists.php.

La radice del documento è una directory montata che vive sul mio Mac e la VM che serve la richiesta è l'installazione di Ubuntu.

Risposte:


1

Prova %{LA-U:REQUEST_FILENAME}invece di %{REQUEST_FILENAME}. Il prefisso LA-U è necessario prima che la richiesta sia mappata sul filesystem.

Modificare:

Non l'ho capito nel mio primo passaggio, devi anche cambiare il primo argomento in RewriteRule in questo modo:

<VirtualHost *:80>
    DocumentRoot /home/sites/dev
    ServerName dev.vbox

    RewriteEngine On
    RewriteCond %{LA-U:REQUEST_FILENAME} !-d
    RewriteCond %{LA-U:REQUEST_FILENAME} !-f
    RewriteRule .* /index.php

    ErrorLog /var/log/apache2/dev.error.log
</VirtualHost>

1
Ho cambiato entrambe le mie condizioni di riscrittura %{LA-U:REQUEST_FILENAME}, esso agisce in sostanza come se mod_rewriteè spento, che serve exists.phpma non la mappatura /searcha index.php. Andare a /servire /index.phpcome ti aspetteresti.
Greg K,

Aggiungi questo ordinato in modo che exists.phpvenga servito quando richiesto ma /searchè ancora servito da index.php:RewriteCond %{REQUEST_FILENAME} !^.*\.(css|js|php|html)$ [nocase]
Greg K

Non l'ho preso al primo passaggio, ha aggiunto una modifica al RewriteRule.
segna il

Ho appena provato questo e /searchnon funziona, non viene reindirizzato a index.php, ma posso accedervi /exists.php.
Greg K,

0

Ho finito per aggiungere un'altra condizione di riscrittura, quindi il mio Virtualhost funzionante sembrava così:

<VirtualHost *:80>

  DocumentRoot /var/www/public_html
  ServerName domain.com

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !^.*\.(php)$ [nocase]
  RewriteRule . /index.php

</VirtualHost>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.