我正在构建一个内容管理系统,允许公司员工通过类别列出。从本质上讲,这正是我想要实现的目标:
有一个名为inside.php
的网页包含404,500等错误。我们有一个名为physicians.php
的页面,它传递变量并根据变量显示特定信息,因此physicians.php?id=1
将显示特定类别的工作人员。目前,当您转到http://website.com/physicians
或http://website.com/physicians/
时,它会重定向到http://website.com/physicians.php
就好了,但即使您输入了医生这个词的某些变体,也会出现问题。例如,physiciansasfhouiae
仍然会链接到我们希望它链接到physicians.php
的{{1}},因为它在技术上是一个不存在的页面。
以下是我现在的重写代码:
inside.php
答案 0 :(得分:1)
您应该首先删除以下两行:
RewriteCond %{REQUEST_URI} physicians
RewriteRule .* physicians.php
由于已经低于它们的RewriteRule
,这两条线不仅不必要,而且它们会引起您注意到的主要问题。这两行与任何 URL匹配,其中包含子字符串“physicians”,这不是您想要的。因此,您需要使匹配模式更具体;谢天谢地,下一个RewriteRule
行已经在做了:
RewriteRule ^physicians/((([a-zA-Z0-9_-]+)/?)*)$ physicians.php?id=$1 [NC,L]
这条线就是你完成所需要的一切。它告诉Apache只匹配“医生”一词,如果它是URL的第一个单词并以斜线结尾(即整个,确切的单词“医生”),它不会像“physiciansasfhouiae”那样匹配拼写错误。
但是作为一个建议,我会略微调整它以使可选的尾部斜杠仍然匹配,并从ID参数中删除斜杠:
RewriteRule ^physicians(/((([a-zA-Z0-9_-]+)/?)*))?$ physicians.php?id=$4 [NC,L]
所以这会将所有这些变化发送给physicians.php:
/physicians
/physicians/
/physicians/abc123
/physicians/abc123/
ID参数将等于abc123
(如果已提供)。所有其他请求将转到inside.php,即使URL包含“医生”的变体。