2011-03-09 18 views
5

Estoy tratando de proteger con contraseña una url específica utilizando un .htaccess. Las diferentes URL apuntan a los mismos archivos pero tienen diferentes funciones. Ahora necesito proteger con contraseña solo una url. Intento hacer esto usando setenvif, pero parece que no funciona. Puede que no entienda completamente el propósito o uso del módulo apache setenv.Cómo hacer condicional .htaccess contraseña proteger

Esto es lo que mi código no parecen funcionar

SetEnvIfNoCase Host "topasswordprotect\.domain\.com$" protecturl 
<IfDefine protecturl> 
    Require valid-user 
    AuthName "Please enter your name and password" 
    AuthType Basic 
    AuthUserFile .htpasswd 
</IfDefine> 
+1

pregunta relacionada: * [condicionalmente requiere autenticación HTTP en función de variable de entorno Apache] (http://stackoverflow.com/q/5845353/195835) * –

Respuesta

3

Finalmente lo descubrí. De hecho, tuve que usar el motor mod_rewrite. Estaba decidido a tener una solución que no implique que deba crear archivos o directorios adicionales.

mismos archivos, no hay directorios adicionales, uno .htaccess:

# Case we are in the protected area! 
RewriteCond %{REQUEST_FILENAME} index.php [OR] 
RewriteCond %{REQUEST_FILENAME} !-f [OR] 
RewriteCond %{REQUEST_URI} ^(\/){1}$ 
RewriteCond %{REQUEST_FILENAME} !-d [OR] 
RewriteCond %{REQUEST_URI} ^(\/){1}$ 
RewriteCond %{HTTP_HOST} ^(protected)\.mydomain\.com$ 
RewriteRule ^(.*)$ admin.php%{REQUEST_URI} [L] 

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

#only protect access to admin.php which is a symlink to index.php 
<FilesMatch "admin.php"> 
    AuthUserFile .htpasswd 
    AuthName EnterPassword 
    AuthType Basic 
    require valid-user 
</FilesMatch> 
+0

Hola, usted está passwording acceso a un archivo aquí, pero ¿cómo ¿Puedes proteger con contraseña un blog que no existe físicamente como ... com/blogname/pero se redirige usando htacess y los enlaces permanentes? –

+0

Ya que reescribe todo/blogname para usar file.php y secure file.php an voila, protected! ¡funciona realmente bien! – Clooner

0

no podría ser posible sin más directamente, sino que podría usted tener otro directorio protegido con contraseña, que ha vinculado el directorio original en ella? Puede usar mod_rewrite para redirigir las solicitudes de coincidencia al directorio protegido por contraseña.

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www.myhost.tld$ 
RewriteRule ^/foo/(.*)$ /bar/linkeddir/$1 
3

Bueno, en realidad esto puede lograrse sin mod_rewrite y con SetEnvIf. Lo necesitaba para el sitio de desarrollo para probar cómo funcionan las etiquetas Facebook OpenGraph.

# allow facebook external hit 
SetEnvIf user-agent "facebookexternalhit/1.1" allowthis 
# disallow some other stuff 
SetEnvIfNoCase Host "topasswordprotect\.domain\.com$" !allowthis 

AuthType Basic 
AuthName "dev access" 
AuthUserFile .htpasswd 
Require valid-user 

Allow from allowthis=1 
Satisfy Any 

Los trabajos sobre IfDefine define que no son iguales que las variables de entorno.

Una cita de apache docs:

El argumento nombre-parámetro es un definen como se da en la línea de comandos a través de httpd -Dparameter-, en el momento en que se inició el servidor.

Cuestiones relacionadas