Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
El contador de php se vuelve loco con .htaccess

Estoy tratando de usar .htaccess para crear direcciones URL bonitas para mi sitio. Aquí está el código:

 RewriteEngine On RewriteBase / ErrorDocument 404 /404.php RewriteCond %{THE_REQUEST} ^GET\ /post\.php\?id=([^\s&]+)&name=([^\s&]+) [NC] RewriteRule ^ /post/%1/%2$ [R=301,L,NE] RewriteRule ^post/([^/]+)/([^/]+)/?$ post.php?id=$1&name=$2 [NC,L]

Y dentro de mi página post.php , tengo un contador de vistas simple:

 $url = substr($_SERVER['REQUEST_URI'],1); $url = explode('/',$url); $id_post = $purifier->purify($url[1]); $post = $db->selectone("select p.*, u.username from tx_post p inner join user u on p.id_user = u.id_user where id_post = :id_post",[':id_post'=>$id_post]); echo 'VIEWS:'.$post['views'].'<br>'; $views = $post['views']+1; echo 'views after:'.$views.'<br>'; $db->update('tx_post',['views'=>$views],'id_post='.$id_post);

Ahora, aquí está mi problema: cuando voy a la URL example.com/post/78 (sin la barra inclinada final), todo funciona bien. El contador obtiene lo que hay en la base de datos e incrementa en 1 como debería. Sin embargo, si coloco la barra inclinada final ( example.com/post/78/ ), el contador aumenta 26. Obviamente, sucede lo mismo cuando paso otro parámetro (como lo que pretendo hacer - example.com/post/78/postname/ ).

El contador no tiene ningún otro incremento en la página, así que supongo que está ejecutando la página varias veces (si eso es posible, no sé mucho sobre servidores web).

¿Alguna idea de lo que puede estar causando esto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

No parece haber ninguna buena razón en el código que publicaste por la que el contador debería volverse loco de esa manera. Sin embargo, las directivas .htaccess que ha publicado no se procesarán en absoluto para una solicitud como example.com/post/78 (sin barra inclinada) o example.com/post/78/ (con barra inclinada); la expresión regular simplemente lo hace no coincide Esto sugiere que MultiViews está habilitado.

Además, parece extraño que extraiga la id de la variable del servidor REQUEST_URI cuando supuestamente está pasando esto en el parámetro de URL. Esto también sugiere que MultiViews se está haciendo cargo. Necesitará que MultiViews deshabilitado para que estas directivas funcionen según lo previsto. En la parte superior de su archivo .htaccess , debe agregar lo siguiente:

 # Disable MultiViews Options -MultiViews

Dado que /post/78 se asigna directamente a un archivo del mismo nombre pero con una extensión .php , con MultiViews habilitado mod_negotiation termina emitiendo una subsolicitud interna para /post.php , sin ningún parámetro de URL.

Tenga en cuenta que las directivas que publicó solo parecen coincidir con las URL del formulario /post/<id>/<postname> (con o sin la barra inclinada final). Para hacer coincidir solo /post/<id> , necesitará una directiva adicional o modificar su directiva existente para que coincida con ambas.

Por ejemplo:

 RewriteRule ^post/([^/]+)(?:/([^/]+))?/?$ post.php?id=$1&name=$2 [NC,L]
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!