【发布时间】:2021-08-20 06:00:06
【问题描述】:
到目前为止,
@anubhava 和 @RavinderSingh13 极大地帮助了我了解有关 .htaccess 和重写规则的更多信息。但是,即使第一条规则(带有一个参数:$id)和第二条规则(带有两个参数:$id 和 $name >) 用于重写 url,我尝试使用两个参数($id 和 $class)的第三条规则失败,并且不会重写最终 url。以下是我到目前为止的整个文件。我想补充一下,$class参数的格式是a-class、b-class等,所以也许是这样可能是重写不起作用的贡献者?感谢您帮助我继续学习至今!
RewriteEngine on
--1st rule with one parameter: $id--
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule ^file\.php$ /directory/%1? [R=301,L,NC]
RewriteRule ^directory/(\d+)/?$ /directory/file.php?id=$1 [L,QSA,NC]
--2nd rule with two parameters: $id and $name--
RewriteEngine on
RewriteCond %{THE_REQUEST} \s/file\.php\?id=(\d+)&name=(\S+)\s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(\d+)/(.*)/?$ /directory/file.php?id=$1&name=$2 [NC,L,QSA]
--My attempt at the third rule following the example from the second, but this rule fails. Parameters are $id and $class--
RewriteEngine on
RewriteCond %{THE_REQUEST} \s/file\.php\?id=(\d+)&class=(\S+)\s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(\d+)/(.*)/?$ /directory/file.php?id=$1&class=$2 [NC,L,QSA]
【问题讨论】:
-
感谢您在问题中分享您的努力(继续),当您现在点击课程网址时发生了什么?
-
您有两个具有相同模式的规则。引擎只会为第一个提供服务。
-
我刚刚在我的页面上返回了一堆未定义的变量。但是,变量本身不是问题,因为当我在没有 url 重写的情况下访问它时,带有 class 和 id 参数的页面可以正常工作。我还要补充一点,我正在尝试以这种格式重写 url,类似于其他 url:ipaddress/directory/47/s-class 在这种情况下,47 是 id 参数和 s-class 是 class 参数。
标签: .htaccess redirect mod-rewrite url-rewriting friendly-url