如何解决使用 .htaccess 和 php 重写不使用连字符“-”的 url
我正在尝试通过使用 .htaccess 重写来使我的 url 用户友好。
来自 url - http://localhost/Web/new_products.PHP?cat_id=1&cat_title=new-rocket
到网址 - http://localhost/Web/new-rocket-1.PHP
在我的 new_products.PHP
$get_cat = "select * from new_products_cat";
$run_cat = MysqLi_query($con,$get_cat);
while($row_cat = MysqLi_fetch_array($run_cat)){
$cat_id = $row_cat['cat_id'];
$cat_title = $row_cat['cat_title'];
$hyphen_cat_title = str_replace(' ','-',$cat_title);
echo "
<a href='new_products.PHP?cat_id=$cat_id&cat_title=$hyphen_cat_title'>
......
......
......
在我的 .htaccess 中
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} /Web/new_products.PHP\?cat_id=([^&\s]+)&cat_title=([^&\s]+) [NC]
RewriteRule ^ /Web/%2-%1\.PHP? [NC,R,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^-]+)-([^.]+)\.PHP$ /Web/new_products.PHP?cat_id=$2&cat_title=$1 [QSA,NC]
</IfModule>
问题 1
我的代码只有在我使用“下划线”时才能工作。 $hyphen_cat_title = str_replace(' ','_',$cat_title);
但如果我使用“连字符”则不起作用,它会继续重定向到 http://localhost/Web/new_products.PHP
问题 2
我可以在 .htaccess 中使用重写将“空格”替换为“连字符”吗?不使用 PHP str_replace
解决方法
对于我的问题 1
问题是 [^-] “除连字符外的每个字符”。感谢@CBroe
下面的代码解决了我的问题。
RewriteRule ^([^.]+)-([^.]+)\.php$ /Web/new_products.php?cat_id=$2&cat_title=$1 [QSA,L,NC]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。