2009-06-12 14 views
11

Mi piacerebbe usare mod_rewrite per creare URL carini, ma avere una singola versione del file .htaccess che può essere utilizzata per qualsiasi utente su un server.Come fare riferimento alla directory corrente da .htaccess usando mod_rewrite?

Finora ho lo standard abbastanza .htaccess URL:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$  /index.php/$1 [L] 

Idealmente, vorrei qualcosa di simile a

RewriteRule ^(.*)$  %{URL of this file's directory}/index.php/$1 [L] 

Questa documentazione mi porterebbe a credere che quello che voglio non è necessario:

Nota: corrispondenza del modello in per-directory con text Non dimenticare mai che Pattern è applicato a un URL completo nei file di configurazione per server. Tuttavia, nei file di configurazione per directory, il prefisso per directory (che è sempre lo stesso per una directory specifica) viene automaticamente rimosso per la corrispondenza del modello e aggiunto automaticamente dopo che la sostituzione è stata eseguita. Questa funzione è essenziale per molti tipi di riscrittura: senza questo, dovresti sempre abbinare la directory genitore che non è sempre possibile.

ho ancora ottenere il risultato sbagliato, però, anche se non ho messo un leader/davanti al index.php sul RewriteRule.

Questo,

http://server/test/stream/stream

si trasforma in

http://server/index.php/stream

non

http://server/test/index.php/stream

quando il file .htaccess è in/test /.

+0

anche https://stackoverflow.com/q/4704508/632951 – Pacerier

risposta

2

Scopriamo che è importante se metto un precedendo/di fronte a index.php oppure no. Lasciandolo fuori, lo script funziona correttamente. Ho provato con la bandiera R che utilizzava le directory fisiche sul reindirizzamento.

+0

Sì, ma ** ** [lasciandolo fuori si fa affidamento sul valore di rewritebase] (https://stackoverflow.com/a/11443194/632951), che ** potrebbe non ** essere la cartella genitore di htaccess. In ogni caso, lasciarlo fuori è una soluzione hacker non una soluzione reale. – Pacerier

8

ho avuto un problema simile, ma ha scoperto che semplicemente lasciando la radice '/' ha provocato il mio server web di test (xampp su Windows) che serve un'URL simile a:

http://localhost/C:/xampp/htdocs/sites/test/

Non perfetto. La mia soluzione è usare un RewriteCond per estrarre il percorso da REQUEST_URI. Ecco un esempio per la rimozione del "index.php" indesiderato s dalla fine dell'URL:

RewriteCond %{REQUEST_URI} ^(.*)/index.php$ 
RewriteRule index.php %1/ [r=301,L] 

Nota: il segno di percentuale in "% 1 /", piuttosto che il simbolo del dollaro.

% 1-% 9 ottiene i modelli dall'ultimo RewriteCond abbinato, $ 1- $ 9 ottiene i motivi da RewriteRule.

Vedi: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

Saluti :)

Problemi correlati