Drupal: Error 403 Forbidden cuando se instala un módulo

Al querer instalar o actualizar un módulo en Drupal 8 despues de ingresar la información del FTP aparece el error:

403 Forbidden
nginx/1.10.0 (Ubuntu)

El problema es que la URL no existe, si nos fijamos en la barra de direcciones veremos algo así:
http://sitio.com/core/authorize.php/core/authorize.php?batch=1&id=17&op=start

Si observan core/authorize.php se repite 2 veces, la solución es crear un Rewrite en la configuración de nuestro servidor web, en este caso estoy utilizando Nginx.

Editamos el archivo /etc/nginx/sites-enabled/default (o el de su sitio) y agregamos la siguiente línea

rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

En mi caso quedo así (es una parte de la configuración):

server {
server_name example.com;
root /var/www/drupal;

client_max_body_size 20M;

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

# Very rarely should these ever be accessed outside of your lan
location ~* \.(txt|log)$ {
allow 192.168.0.0/16;
deny all;
}

location ~ \..*/.*\.php$ {
return 403;
}

rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

location ~ ^/sites/.*/private/ {
return 403;
}

# Allow “Well-Known URIs” as per RFC 5785
location ~* ^/.well-known/ {
allow all;
}

Reiniciamos el servidor web y listo:

/etc/init.d/nginx restart

Error 500 con Nginx+Chroot+PHP5-FPM+PhpMyadmin

Despues de hacer la instalación de Nginx y PHP5-FPM con Chroot (Jail) e instalar MySQL PhpMyAdmin la página me daba un error 500.

Investigando veo que el problema esta en la siguiente línea del archivo library/common.inc.php de PhpMyAdmin.

date_default_timezone_set(@date_default_timezone_get());

El problema está en que la función date_default_timezone_get() y todo se debe a que no se tienen los archivos necesarios para buscar la timezone del servidor, como lo muestra el log de nginx

[error] 12058#0: *13 FastCGI sent in stderr: “PHP message: PHP Fatal error: date_default_timezone_get(): Timezone database is corrupt – this should *never* happen! in /var/www/phpmyadmin/libraries/common.inc.php on line 276” while reading response header from upstream, client: 111.111.111.111, server: miservidor.com, request: “GET /phpmyadmin/ HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “miservidor.com”

La solución es instalar la timezonedb con PHP-PEAR ( pecl ), procedemos con el siguiente código:

apt-get install php-pear php5-dev
pecl install timezonedb
echo ‘extension=timezonedb.so’> /etc/php5/mods-available/timezonedb.ini
ln -sf /etc/php5/mods-available/timezonedb.ini /etc/php5/fpm/conf.d/30-timezonedb.ini
service php5-fpm restart

Y listo!!.. ya debe de funcionar correctamente la página de PhpMyAdmin

Codeigniter: Only variable references should be returned by reference

Después de actualizar mi versión de PHP a la 5.6.4 mis paginas en Codeigniter me mostraban este error:

A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257

La solución esta en modificar la linea 257 que esta en el archivo system/core/Common.php en donde veremos algo asi:

return $_config[0] =& $config;

Y remplazar por este codigo:

$_config[0] =& $config;
return $_config[0];

Listo!! adiós a la noticia en PHP.

XAMPP no inicia el servicio Apache

Me cambie de Appserv (que tengo años usandolo) a Xampp en la computadora con Windows, ya que necesito la ultima versión estable de PHP, pero tenía un problema al iniciar el servicio de apache, xampp me indicaba que no podia usarlo porque el puerto 80 esta ocupado.

Si escribia localhost en el navegador + firebug para ver el encabezado de la petición HTTP veo la siguiente línea.

Server: Microsoft-HTTPAPI/2.0

Y la página de error:

Not Found

HTTP Error 404. The requested resource is not found.

Lo más raro de todo es que no tengo el IIS instalado, peroooo!! si tengo el SQL Server 2008 R2 que es el que da problemas., aquí la solución para desactivar el servicio que nos da lata.

Microsoft SQL Server 2008 R2 > Configuration Tools > SQL Server Configuration Manager

Una vez dentro del programa SQL Server Configuration Manager, en el menú de la izquierda: SQL Server Services seleccionamos la opción donde aparezca:

SQL Server Reporting Services (MSSQLSERVER) botón derecho y Stop.

Ahora, para que no de lata al momento de reiniciar windows, tenemos que desactivar por completo el inicio automatico del proceso., solo doble click y aparecerá una ventana con pestañas:

Service > Start Mode: Disabled

Aceptar y listo!!.., si no funciona, reiniciamos Windows (para variar)… apache ready!

Linux: Contar requests por IP de un access_log de Apache

Para ver el total de peticiones a nuestro servidor apache por dirección IP, podemos ejecutar este comando desde la terminal.

cat /var/log/apache2/access_log |awk ‘{print($1)}’|sort |uniq -c |sort

Y listo, nos dará como resultado 2 columnas, la primera con el total de visitas y la segunda la dirección IP, útil para saber si alguien esta queriendo entrar al sistema indebidamente, aunque por lo general en los primeros lugares con más visitas encontraremos a Google o MSN Search.

mcrypt: Error al cargar el modulo php_mcrypt en windows

Estoy utilizando Ushahidi en un servidor apache-php5 en windows, con AppServ, el problema esta que me dice que requiere la libreria php_mcrypt para funcionar, y pues entro a php.ini, busco la linea donde dice: extension=php_mcrypt.dll y descomento la linea, reinicio el servicio con apache_servicefix.bat dentro de la carpeta c:/AppServ/Apache2.2/ pero el problema sigue.

Revisando el log de apache veo el siguiente error:

PHP Warning: PHP Startup: Unable to load dynamic library ‘C:/AppServ\\php5\\ext\\php_mcrypt.dll’ – No se puede encontrar el m\xf3dulo especificado.\r\n in Unknown on line 0

La solución esta en copiar el archivo libmcrypt.dll que esta dentro de c:/appserv/php5/libmcrypt.dll a c:/AppServ/Apache2.2/bin/ reiniciar el servicio y listo!.., ya tenemos correctamente instalada la libreria MCrypt de PHP

Apache: 403 Forbidden con Codeigniter

Siguiendo con el error 403 Forbidden en Apache con Codeigniter pues busqué y busqué la solución, ya que la que habia investigado antes pues era temporal, y despues de navegar por X número de páginas zaaas, vuelve a salir el error 403.

La solución sigue estando en la configuración de Apache2.0 y el módulo rewrite, primero modificamos el archivo en /etc/apache2/sites-enabled/000-default (u otro parecido)

< Directory />
Options FollowSymLinks SymLinksIfOwnerMatch
AllowOverride FileInfo
< /Directory>

Y despues en el .htaccess, o lo pueden poner en el otro archivo la siguiente info:

< IfModule mod_mime.c>
AddType text/html;charset=UTF-8 .html
< /IfModule>

< IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#’system’ can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#When your application folder isn’t in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename ‘application’ to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn’t true it sends the
#request to index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^(/index\.php|/img|/js|/css|/kml|/robots\.txt|/favicon\.ico)

RewriteRule ^(.*)$ /index.php/$1 [L]
< /IfModule>

< IfModule !mod_rewrite.c>
# If we don’t have mod_rewrite installed, all 404’s
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php
< /IfModule>

Donde dice UTF8 es para que todas las páginas HTML las mande con ese encoding, y la parte que creo es importante es donde se filtra el js, css, pero bueno!, ya con eso funciona bien el codeigniter y sin errores 403 forbidden.

Apache: 403 Forbidden

Algunas veces cuando estoy navegando en un sistema que realice el cual esta montado en Apache2 con URL amigables me aparecé el error 403 Forbidden y dice que no tiene privilegios para acceder al recurso.

Investigando un poco resulta que el problema esta con el modulo Rewrite de Apache ( mod_rewrite ) y la solución es habilitar enlaces simbolicos, teniendo nuestro .htaccess algo así:

< IfModule mod_rewrite.c>
Options +FollowSymLinks SymLinksIfOwnerMatch
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
< /IfModule>

Observen que se tiene la opción: +FollowSymLinks esto hace que el error 403 no aparezca más.

Y si estan usando CodeIgniter pues este código les sirve para tener URL amigables =)

Iniciar XAMPP automaticamente en Mac OSx

Uno de los problemas que tenia es que cada vez que iniciaba la Mac, al momento de cargar el XAMPP me pedia contraseña de root, y pues una o dos veces esta bien pero diario es una lata!.., así que la mejor opción es iniciar como servicio de sistema, así nos evitamos la molestia de poner la clave del xampp para arrancar el apache, mysql.

Se debe de crear un archivo con privilegios de root y grupo wheel (root:wheel) en la siguiente carpeta: /Library/LaunchDaemons/ y se debe de llamar: org.apachefriends.xampp.plist quedando algo así:

/Library/LaunchDaemons/org.apachefriends.xampp.plist

Y pues ponemos el siguiente contenido:

<br /> < ?xml version="1.0" encoding="UTF-8"?><br /> < !DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></p>
<plist version="1.0"> <dict><br /> <key>KeepAlive</key><br /> <br />
<true /> <key>Label</key><br /> <string>org.apachefriends.xampp</string><br /> <key>ProgramArguments</key><br /> <array><br /> <string>/Applications/XAMPP/xamppfiles/xampp</string><br /> <string>start</string><br /> </array><br /> <key>QueueDirectories</key><br /> <array /><br /> <key>RunAtLoad</key><br /> <br />
<true /> <key>WatchPaths</key><br /> <array /><br /> </dict> </plist> 

Y listo!! reiniciamos la MacOSX y debe de jalar!, igual si queremos probar directo desde consola poner el siguiente comando (como administrador).

launchctl load /Library/LaunchDaemons/org.apachefriends.xampp.plist

Y otra vez listo! a disfrutar de Apache

htaccess no funciona en Apache

Estaba agregando una contraseña a un archivo desde el archivo de configuración .htaccess de Apache2, pero resulta que no me respeta los parametros que pongo., bueno, la solución a todo esto es modificar el archivo que esta dentro de la carpeta /etc/apache2/sites-enabled/000-default (puede variar dependiendo de la configuración de tu compu).

Buscamos la linea donde dice ”AllowOverride” y en lugar que diga None , le ponemos All , así ya deberia de funcionar el .htaccess

Aquí les pongo el ejemplo de mi htaccess en donde pido la contraseña cuando se ve un archivo.

AuthUserFile /var/www/.htpasswd
AuthType Basic
AuthName “Dame la clave”


Require valid-user

Y listo!! :) , para crear el archivo de password se pone este comando cuando es la primera vez:

htpasswd -c .htpasswd nombre_usuario

Y este para agregar otro más

htpasswd .htpasswd otro_usuario

Ahora si!!!, ya están protegidas las páginas solicitadas