Le soluzioni di networking che ospitano l'URL sono strane per il server Apache

Stavo cercando di ottimizzare gli URL per le pagine generate dynamicmente sul mio sito Web, in modo che quando un utente visitava l' topicview/interesting-user-friendly-text virtuale topicview/interesting-user-friendly-text avrebbe davvero visto, sotto la cappa, topicview.php?topicid=123

Ho aggiunto il codice necessario al mio file .htaccess per sostituire la parte topicview/interesting-text dell'URL con topicview.php?topicname=interesting-test , ma il Regex non ha funzionato correttamente.

Così, ho cambiato il Regex per restituire l'integer URL in modo da capire perché non stava funzionando con questo codice:

 #Allow for topicview/topic-name URLs RewriteRule (.+)$ topicview.php?topicname=$1 [L] 

Ho quindi visitato topicview/user-friendly-text . Non sono sicuro se questo è unico per l'hosting di soluzioni di networking, tuttavia, quando ho esaminato il parametro GET topicname , ho ottenuto questa string in cambio:

data/1/2/323/232/823238/user/999999/htdocs/topicview.php

Questo URL non è stato visualizzato nel parametro topicname GET, solo un file regolare, come index.php o topicview.php , se ho appena visitato l'URL index.php o topicview.php

Perché l'URL è rappresentato internamente come questo al server Apache e come posso riscrivere il mio codice mod_rewrite per get un URL virtuale più user-friendly per topicview.php?topicid=1 pagine?

Grazie

Per l'URL amichevole prova questo nel tuo file .htaccess

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/?topicview/([^/.*]+)/?$ topicview.php?topicname=$1 [L,QSA] 

Il pattern abbinato in un RewriteRule è normalmente simile al REQUEST_URI, ma il comportmento che descrivi suggerisce che corrisponde al REQUEST_FILENAME o qualcosa di simile che è il path del file che include la root completa del documento.

Questo suggerirebbe che il tuo RewriteRule non sia nel tuo file .htaccess ma invece nelle tue o nelle regole nei file di configuration di Apache, corretto?

Invece dovresti provare ad get il valore che vuoi usando un RewriteCond, così puoi garantire che stai corrispondendo con il REQUEST_URI, ad esempio:

 RewriteCond %{REQUEST_URI} ^(.*)$ RewriteRule . topicview.php?topicname=%1 [L] 

Si noti il% 1 anziché $ 1 che consente di utilizzare i valori acquisiti in RewriteCond.