2011-06-30 17 views
5

Pido disculpas por adelantado si esto es demasiado largo. Me imagino que más detalles es mejor que menos y espero no estar siendo terriblemente divagante :-)¿Cómo puedo volver a escribir reglas con alias?

Uso WAMP en mi laptop para el desarrollador local, y tengo varios archivos c:/wamp/alias/* cada uno apuntando a un directorio de trabajo del proyecto. He tenido una excelente ayuda mod_rewrite y conseguido

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

a trabajar para cambiar localhost/.../ih/sub/dir a localhost/.../index.php/sub/dir para las direcciones URL que son SEO-friendly y corto. [No he pasado a hacer esto en prod, pero sospecho que funcionará igual de bien.] Sin embargo, para tenerlo todo junto tuve que cambiar mi raíz de documento de c:/wamp/www/ a c:/, lo cual preferiría no hacer. solo en caso de que mi Apache sea pirateado y de lo contrario porque es un kludge.

Mi archivo de alias de prueba se parece

Alias /testme "c:/var/tmp/wamp-testme/" 
<Directory "c:/var/tmp/wamp-testme/"> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride all 
    Order Deny,Allow 
    Deny from all 
    Allow from 127.0.0.1 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*\/)?ih(\/.*)?$ $1index.php$2 [L,QSA] 
</Directory> 

y el error que consigo al intentar cargar http://localhost/testme/rewrites/ih/sub/path es

[Thu Jun 30 06:46:13 2011] [error] [client 127.0.0.1] 
    File does not exist: C:/wamp/www/var 

con un juego

Not Found 
The requested URL /var/tmp/wamp-testme/rewrites/index.php/sub/path 
    was not found on this server. 

en el navegador. Efectivamente, la misma configuración en mi archivo c:/wamp/alias/flying.conf que apunta al directorio c:/data/flying/ arroja File does not exist: C:/wamp/www/data en el archivo de registro de errores, y así sucesivamente.

Sooooo ... ¿Cómo puedo tener una regla de reescritura que trascienda los alias sin tener mi raíz de documento en el directorio raíz de mi máquina?

Respuesta

7

Impar: intente agregar un indicador PT a la regla de reescritura: esto obliga al URL reescrito a enviarse de nuevo al motor de mapeo de URL.

EDITAR: intente configurar el RewriteBase en el Directorio.

+0

Gracias por la sugerencia. Intentando de nuevo con mi regla de reescritura como 'RewriteRule^(. * \ /)? Ih (\ /.*)? $ $ 1index.php $ 2 [L, QSA, PT]' todavía me da el mismo error :-( –

+0

Hmm . Podría intentar agregar una RewriteBase: honestamente no estoy seguro de cómo interactúa con la directiva Alias, pero el error 404 podría deberse a que está asumiendo que la URL reescrita es relativa a su raíz de apache. – Femi

+0

Parece que fue eso. Configurar la base para '/ testme /' para el caso anterior hizo el truco. ¡Sí! Intenté poner las reglas en el archivo 'httpd.conf', pero si con' RewriteBase "/" 'there o' RewriteBase "/ testme /" 'en el alias archivo no funcionó, así que estoy atascado con las reglas en cada archivo de alias. Ahora no sé si tengo que hacer funcionar esto a continuación a través de archivos '.htaccess' para que no tenga que seguir jugando con 'httpd.conf' en mi servidor de producción o ... no tendrá toda esta complejidad porque no tengo alias allí :-) [Aunque tengo fantasmas. Más experimeting ...] ¡Gracias de nuevo! –

Cuestiones relacionadas