在 .htaccess 中定义重写规则时,我遇到了模式干扰问题。
我试图重写的网站链接是:
- example.com/?item=work --> example.com/work
- example.com/?item=work&tile=x --> example.com/work/x
- example.com/?item=travel --> example.com/travel
- example.com/?item=travel&blog=x --> example.com/travel/x
- example.com/?item=about --> example.com/about
我已经用过在线重写规则生成器 http://www.generateit.net/mod-rewrite/index.php因为我的知识在这里非常有限。对于“tile”和“blog”URL 的重写规则,我在模式中分别添加了“work”和“travel”,以使其独一无二。对于一般页面“工作”、“旅行”和“关于”,我无法应用相同的逻辑,因为斜杠之前没有任何内容(我可以以某种方式包含完整的 URL 作为模式吗?)。因此,它干扰了其他两个规则:
RewriteEngine On
RewriteRule ^([^/]*)$ /?item=$1 [L]
RewriteRule ^travel/([^/]*)$ ?item=travel&blog=$1 [L]
RewriteRule ^work/([^/]*)$ /?item=work&tile=$1 [L]
我尝试做一些研究,发现我可以包含一个附加标准来指定它是一个项目:
RewriteRule ^item/([^/]*)$ /?item=$1 [L]
但是是否还有一种方法可以不需要这样编写规则,并且使用“example.com/about”将简单地将您重定向到“example.com/?item=about”,而不会干扰另外两条规则?
Edit
我只是在淋浴时想我可以使用“工作”、“关于”和“旅行”作为模式本身。这会产生以下一组规则,并且它们实际上有效(如果它们的顺序正确):-)
RewriteRule ^travel/([^/]*)$ ?item=travel&blog=$1 [L]
RewriteRule ^work/([^/]*)$ /?item=work&tile=$1 [L]
RewriteRule ^about /?item=about [L]
RewriteRule ^travel /?item=travel [L]
RewriteRule ^work /?item=work [L]
然而,这看起来很脏。有一个更好的方法吗?
看起来不错。为了改进它,最后三个可以替换为:
RewriteRule ^(about|travel|work)$ /?item=$1 [L]
另外两个需要保持不变,因为参数的命名不同,因此不能在一条规则中完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)