.htaccess页面重写拼写错误

时间:2017-04-13 17:51:54

标签: php .htaccess mod-rewrite url-rewriting

我正在构建一个内容管理系统,允许公司员工通过类别列出。从本质上讲,这正是我想要实现的目标:

有一个名为inside.php的网页包含404,500等错误。我们有一个名为physicians.php的页面,它传递变量并根据变量显示特定信息,因此physicians.php?id=1将显示特定类别的工作人员。目前,当您转到http://website.com/physicianshttp://website.com/physicians/时,它会重定向到http://website.com/physicians.php就好了,但即使您输入了医生这个词的某些变体,也会出现问题。例如,physiciansasfhouiae仍然会链接到我们希望它链接到physicians.php的{​​{1}},因为它在技术上是一个不存在的页面。

以下是我现在的重写代码:

inside.php

1 个答案:

答案 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包含“医生”的变体。