Estoy intentando hacer otro sistema SEO con PHP/.htaccess...
Necesito que se apliquen las siguientes reglas:
- Debe capturar todas las URL que no terminan con una extensión (www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me --> no atrapar).
- Debe capturar todas las URL que terminan en .php* (.php, .php4...) (que son las excepciones a la regla n.° 1).
- Todas las reglas sólo deben aplicarse en algunos directorios ynoen sus subdirectorios (/ y /framework hasta ahora).
- El htaccess debe enviar la URL escrita en un valor GET para poder trabajar con ella en PHP.
¿Algún asistente de reescritura de mods puede ayudarme?
Editar:
Bien, después de leer las publicaciones sugeridas, se me ocurrió esto, pero creo que está estancado en un bucle... ¿Alguien puede ayudar?
<IfModule mod_rewrite.c>
RewriteEngine On
# 1
RewriteCond %{REQUEST_FILENAME} !\.[^/]+$ [OR]
# 2
RewriteCond %{REQUEST_FILENAME} \.php.*$
# 4
RewriteRule ^(.*)$ http://localhost/seo-urls/seo-urls-mapper.php%3Frequested=$1?%{QUERY_STRING}
</IfModule>
Como quiero completar esto durante mis vacaciones de Navidad, agregaré una recompensa :) ¡Gracias por tu ayuda y felices fiestas!
Respuesta1
Pruebe esto como punto de partida:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} !\.(.*)
RewriteCond %{REQUEST_URI} !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
Primer conjunto de reglas:
- No ejecute esta regla si el
uri
parámetro GET está configurado (de lo contrario, obtendrá un bucle al redirigir al script de destino después de agregar eluri
parámetro). - Si el URI contiene un
.
entonces omita este conjunto de reglas (es posible que desee crear una regla más específica para extensiones particulares, pero esto funciona) - Si el URI está en un directorio restringido, omita este conjunto de reglas
- Redirigir a
index.php
(es posible que deba cambiar el destino) y configurar eluri
parámetro GET
Segundo conjunto de reglas:
- Si el
uri
parámetro está configurado, omita este conjunto de reglas para evitar un bucle - Continúe si el URI solicitado termina en
.php
,.php4
o similar (.php123
lo haríanoser redirigido) - Redirigir a
index.php
(es posible que deba cambiar el destino) y configurar eluri
parámetro GET
No hace falta un "asistente" para crear reglas mod_rewrite; dedique algún tiempo a experimentar por su cuenta y leer la guía que recomendó jscott.
HacerHaga todas sus preguntas de tipo teórico aquí si desea excelentes explicaciones (a diferencia de las preguntas de tipo práctico en las que parece que quienes responden están colaborando con su proyecto en lugar de ampliar su conocimiento).