.htaccess RewriteRule not working, need to generate a URL friendly

后端 未结 1 1379
醉酒成梦
醉酒成梦 2021-01-23 07:20

I have this dynamic link:

http://www.nortedigital.mx/article.php?id=36175&t=dobla_las_manos_el_snte__avala_reforma_educativa

and I need to

相关标签:
1条回答
  • 2021-01-23 08:02

    You must capture the query string in a RewriteCond and use that in the RewriteRule

    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^id=(\d+)&t=(.+)$
    RewriteRule ^/?article\.php$ /%1/%2.html? [R,L]
    

    This redirects the client to request i.e. /36174/se_enriquecio_elba_en_sexenios_del_pan.html. Now you must server the real page. For that, we add an additional rule, similar to the one you already have in your question

    RewriteRule ^/?(.+?)/(.+?)\.html$ /article.php?id=$1&t=$2 [L]
    

    But now, there's an endless redirect loop. We break this by using an environment variable. Here is the whole complete ruleset

    RewriteEngine On
    
    RewriteCond %{ENV:REDIRECT_SEO} ^$
    RewriteCond %{QUERY_STRING} ^id=(\d+)&t=(.+)$
    RewriteRule ^/?article\.php$ /%1/%2.html? [R,L]
    
    RewriteRule ^/?(.+?)/(.+?)\.html$ /article.php?id=$1&t=$2 [L,E=SEO:1]
    

    This rule does the redirect as above, as long as the environment variable is not set. And it serves the real page from article.php and sets the environment variable at the same time to prevent the loop.

    You can use cookies for this purpose too. But that will break, if cookies are disabled in the client.

    0 讨论(0)
提交回复
热议问题