Hola Juan,
a ver si con esta información vamos aclarando el problemilla, que es de lo que se trata:
1.- Moodle construye los links (en un 99% de las ocasiones) utilizando lo que se haya configurado en: $CFG->wwwroot. Por lo tanto, dicha variable tiene que ser siempre la URL pública del servidor (en vuestro caso, "
http://www.usc.es/cpoliticas"). Esto supongo que lo tenéis así.
2.- En el 1% restante los links (especialmente las acciones de los formularios) los construye utilizando unas variables standard en cualquier entorno CGI y similares que son SERVER_NAME y HTTP_HOST. Esta construcción especial se debe a que algunas páginas pueden ser llamadas desde distintos orígenes y la única forma de reconstruir las URLs es utilizándolas.
Pues el asunto es que el responsable de poner valor a esas variables es Apache y, dependiendo de la estructura que se haya montado en vuestra institución, hay que realizar una configuración diferente (de Apache) para que a Moodle le lleguen esas variables correctamente configuradas.
Y vosotros parece ser que tenéis el chiringuito organizado de tal forma que vuestro servidor público (
http://www.usc.es) es un proxy-inverso que realiza las consultas a los servidores privados (
http://smicro1.usc.es), devolviendo el resultado al navegador del usuario.
3.- Esto implica que, en la práctica, el servidor privado (el REAL) está recibiendo TODAS las peticiones desde el servidor público (o el proxy inverso, como prefieras llamarlo).
4.- En Apache (servidor privado) se puede hacer que las variables que te he indicado antes se construyan de dos formas:
a) Forzándolas: En el parámetro "ServerName" se especifica una dirección y, configurando la variable "UseCanonicalName" a "On", esa dirección es la utilizada por las variables de CGI (y consecuentemente, por Moodle).
b) Cogiéndolas del cliente que realiza la petición. Configurando el "UseCanonicalName" a "Off" las variables anteriores se rellenan según haya sido la llamada al servidor interno. Así es como lo tenéis configurado ahora.
5.- Como hemos visto en el punto 3, todas las llamadas al servidor interno están siendo realizadas desde el público (proxy inverso). Y ahí está el quiz del asunto. Estoy casi seguro que el servidor público está haciendo las llamadas al interno, llamando a direcciones internas (
http://smicro1.usc.es), con lo cual la variable de entorno SERVER_NAME se rellena con ese valor y Moodle, todo confiado, lo usa para crear algunos links. Y eso es lo que llega, finalmente, al navegador. Evidentemente, en la siguiente petición, el navegador pide algo directamente a vuestro servidor interno, que no es accesible públicamente, y muestra el error de "Prohibido" que comentas.
6.- Visto todo lo anterior, lo que hay que conseguir es que cuando el servidor interno recibe peticiones las reciba como si fuera el servidor público, para que la variable SERVER_NAME se rellene bien y Moode pueda construir links fiables. ¿Y como se consigue esto? Pues depende de la forma en la que está construída (segmentada) vuestra red y demás, pero básicamente hay dos alternativas:
a) O bien el servidor público hace las llamadas al interno llamándolo con el nombre público (lo cual seguramente implicaría modificar el etc/hosts o similares del público).
b) O bien en el servidor interno activáis el "UseCanonicalName" a "On" con lo cual apache forzará ese valor en la variable SERVER_NAME utilizada por Moodle.
pero estas dos soluciones dependen, también de si tenéis accesos diferentes desde fuera de la organización (utilizando el servidor público) y desde dentro de la organización (directamene al servidor interno) o si siempre accedéis a través del externo...
7.- En cualquier caso, es a través de la configuración de Apache como se consigue hacer funcionar todo. La idea, insisto, porque es lo más importante, es que el servidor interno tiene que construir correctamente la variable SERVER_NAME (y esto se consigue de alguna de las dos formas definidas en el punto 6).
8.- Por último, entiendo (aunque no lo he probado), que "toqueteando" en el código de Moodle encargado de obtener el contenido de la variable SERVER_NAME se podría forzar a Moodle a que utilice vuestra dirección pública pero, seguramente es una solución menos elegante ya que, con cada actualización, tendrías que repetir los cambios al código de Moodle.
9.- Todo lo especificado en los puntos 1-7 lo he comprobado "en mis carnes", utilizando un servidor apache como proxy-inverso y otro como servidor de Moodle y, aplicando cualquiera de las dos soluciones del punto 6, tanto los accesos externos (a través del proxy inverso) como internos (directamente al servidor Moodle) los tengo solucionados.
10.- Vaya rollo!
Espero que sirva para algo...ciao