2012-01-03 21 views
14

busco en Internet sobre .htaccess y reescribo las reglas que tengo que hacer con mi sitio..htaccess y params

vi algo que no entiendo y me gustaría saber lo que significa

me pregunto ¿cuál es la diferencia entre el 2 expresión regular que tengo que usar para mi sitio entre todos los demás que necesito para usar):

RewriteRule ^home$ mainpage.php?id=$1 [QSA] 

y

RewriteRule ^home(/)?$ mainpage.php?id=$1 [L] 

Miré el QSA y L pero lo que los medios (/)?

+0

home.php y mainpage.php? –

+0

oh lo siento copiar y pegar mal –

+1

'(/)?' Se usa para capturar tanto 'example.com/home' como' example.com/home/'. – Virendra

Respuesta

18

La expresión será (/)? no (/). Significa barra o no en la URL. Estas dos direcciones URL se van al mismo lugar:

http://www.domain.com/home/

y

http://www.domain.com/home 

Así que la barra es opcional. De esta manera, si un bot o un motor de búsqueda lo pone, la regla funcionará.

Puede volver a escribir las reglas de la siguiente manera:

RewriteRule ^home/?$ mainpage.php?id=$1 [L,QSA] 

Además, vi que dijiste:

entre todos los demás que necesito utilizar

Si todas sus páginas va al mismo archivo (en este caso, mainpage.php), puede crear una regla que los reescribirá automáticamente en lugar de crear 10 o 15 reglas (o más). Esto se puede hacer de esta manera:

RewriteEngine on 
REwriteBase/
RewriteRule ^([a-z0-9\-_]+)/?$ mainpage.php?id=$1 [L,QSA] 

Esta regla se utilizará letras, números, guiones y guiones bajos que la página.

+0

gracias por esta información y esta regla, tengo aproximadamente 25 páginas y eso es muy útil –

+0

de nada –

2

(/)? significa "una barra inclinada opcional".

  • (/) crea un grupo que contiene/coincide con lo que hay entre paréntesis. En este caso, dado que es un solo carácter, los paréntesis son más para capturar piezas que cualquier otra cosa. (Lo que satisfaga se convertirá en $1, $2, etc dependiendo del número de grupos de captura (conjuntos de paréntesis) que hay en el patrón y dónde están.)

Por cierto, su primer RewriteRule no hace una porción entera de sentido: dado que no hay un grupo que proporcione un valor para $1, probablemente siempre estará en blanco. En el segundo, $1 estará vacío o en barra, dependiendo de si el subpatrón coincide. home se reescribirá en mainpage.php?id=, y home/ se reescribirá en mainpage.php?id=/.

  • El ? significa "0 o 1 del átomo anterior".("Átomos", por cierto, son los componentes básicos de una expresión regular). En este caso, dado que el átomo que lo precede es (/) (que es efectivamente /), ? significa "0 o 1 barras".
+0

gracias por la información –