.htaccess acorta la URL usando php $ _GET

Necesito poder acortar mi página de:

mydomain.com/mixtape.php?mixid=(WHATEVER NUMBER) 

A:

 mydomain.com/m/(WHATEVER NUMBER) 

Ahora bien, normalmente esto no sería un gran problema para mí, pero debido a algunas funciones preexistentes en mi archivo .htaccess, es realmente difícil para esta función no interactuar inadecuadamente con los demás.

Debajo está el código actual de mi archivo .htaccess (Y NINGUNO DE ELLOS PUEDE CAMBIAR)

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/\.]+)/?$ profile.php?user=$1 [L] 

Arriba, el archivo .htaccess está cortocircuitando mi

 mydomain.com/profile.php?username=(USERNAME) 

a

 mydomain.com/(USERNAME) 

¿Hay alguien por ahí que pueda ayudarme al poder acortar m / index.php? Mixid y no tener conflicto con la función preexistente?

Anteponga esta regla a su bloque .htaccess reescribiendo la url de perfil (después de encender el motor de reescritura):

 RewriteCond $1 ^m/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ mix.php?id=$1 [L] 

Esa regla ahora solo se usará para URLS como: mydomain.com/m/(WHATEVER NUMBER)

  • La primera línea es una condición de que la URL entrante debe comenzar con m/
  • La segunda y tercera líneas son condiciones de que la URL entrante no represente un archivo o una carpeta real (no queremos que nuestra regla de reescritura humilde nos bloquee de un recurso real).
  • La cuarta línea es la regla actual en sí que utiliza una syntax de expresión regular para mixtape.php y capturar todo lo que aparece después del nombre de host y lo pasa al archivo mixtape.php como un parámetro GET llamado id . Esta línea también contiene la bandera [L] que indica que no se producirán más reglas o reescritura en la URL entrante actual.

En su archivo mix.php puede usar el método de explosión para dividir la cadena resultante en una matriz:

http://example.com/m/foo/bar =>
` http://example.com/mixtape.php?id=/m/foo/bar

 $splitArr = explode('/',$_GET['id']); 

 $splitArr => array ( 0 => 'm', 1 => 'foo', 1 => 'bar', ) 

y eliminar la m inicial con

 array_shift(); 

Luego se queda con $splitArr contiene todas las partes de su URL, dividido con un delimitador / (barra inclinada).

La URL example.com/m/foo/bar se vería así:

 array ( 0 => 'foo', 1 => 'bar', ) 

Es importante colocar esta regla antes que la existente ya que la regla existente actuará en cualquier URL entrante. Las dos últimas reglas que tienes deben aparecer así:

 RewriteEngine on RewriteCond $1 ^m/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ mix.php?id=$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/\.]+)/?$ profile.php?user=$1 [L] 

En cuanto a su statement:

Y NINGUNO DE ELLOS PUEDE CAMBIAR

Le recomendaría seriamente que considere implementar un pequeño cambio en esa primera regla. Haciendo que la url final sea algo así como mydomain.com/users/(USERNAME) (como lo hacen aquí) . En estos casos, es mucho mejor ser más específico que demasiado general (como lo es la regla actual). ¿Ha considerado la confusión que podría crearse si alguien eligiera un nombre de usuario como:

  • acerca de
  • Preguntas más frecuentes
  • casa

Si bien los nombres de usuario son perfectamente válidos, estos perfiles de usuarios serían:

  • mydomain.com/about
  • mydomain.com/faq
  • midominio.com/home

Esos nombres de usuario bloquearán las URL importantes que quizás desee guardar para otras ubicaciones en su sitio. Creo que está claro por qué esos nombres de usuario serían indeseables.

 RewriteRule ^m/([0-9]+)$ /mixtape.php?mixid=$1 

Coloque antes o después de la regla existente. No debería causar ningún conflicto.