的.htaccess重写规则不能正常工作,需要生成一个友好的URL(.htaccess Rewrit

2019-08-17 06:39发布

我有这个动态链接:

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

我需要在URL友好这样的转换:

http://www.nortedigital.mx/36174/se_enriquecio_elba_en_sexenios_del_pan.html

和我有这个重写规则:

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

但不起作用。 请,有人能帮助我吗?

Answer 1:

你必须捕捉查询字符串中的RewriteCond和使用,在重写规则

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

这会重定向客户端请求,即/36174/se_enriquecio_elba_en_sexenios_del_pan.html 。 现在,您必须服务器的真实页面。 为此,我们增加一个额外的规则,类似于你已经在你的问题的一个

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

但现在,有一个无止境的重定向循环。 我们通过使用环境变量打破这一点。 这里是整个完整的规则集

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]

这条规则确实重定向如上,只要环境变量未设置。 而且它提供真正的页面article.php并设置环境变量在同一时间,以防止循环。

您可以使用Cookie为了这个目的了。 但是,这将打破,如果Cookie在客户端禁用。



文章来源: .htaccess RewriteRule not working, need to generate a URL friendly