我目前正在尝试设置重写规则,以便为更加搜索引擎优化的网址结构设置内部重定向。
我想表明:
/find-teacher/primary-school.php
而不是悲伤的样子:
/find-teacher/subject-class-choose.php?school=primary-school
在我阅读了一些有关重写规则和重写cond的帖子和教程之后,我想出了这个:
在我的choose-school.php中,我有一个漂亮的网址链接:
<a href="https://www.example.com/find-teacher/primary-school.php">
Primary School</a>
在我的.htaccess中:
RewriteCond %{REQUEST_URI} ^find-teacher/primary-school.php$
RewriteRule ^find-teacher/([a-z-]+)-([0-9]+).php$ /find-teacher/subject-class-choose.php?school=$1 [NC]
现在,如果我做对了,RewriteCond
部分会检查是否请求了以下网址。如果是这种情况,那么([a-z-]+)-([0-9]+)
的部分将替换为替换部分的$1
(/find-teacher/subject-class-choose.php?school=$1
)
问题是,如果点击/find-teacher/primary-school.php
答案 0 :(得分:1)
这里不需要RewriteCond和RewriteRule,因为它们(或者应该)都在检查相同的东西。
但是,目前没有匹配这两种模式的网址。让我们分解问题。
要专门检查网址/find-teacher/primary-school.php
,您可以写一下:
RewriteRule ^find-teacher/primary-school.php$ /find-teacher/subject-class-choose.php?school=primary-school [NC]
下一步是使用(
和)
“捕获”“小学”,并使用$1
将其动态放置到目标上:
RewriteRule ^find-teacher/(primary-school).php$ /find-teacher/subject-class-choose.php?school=$1 [NC]
最后,我们可以使用正则表达式[a-z-]+
使模式匹配任何字母或连字符而不是精确的字符串:
RewriteRule ^find-teacher/([a-z-]+).php$ /find-teacher/subject-class-choose.php?school=$1 [NC]
在您的问题中的规则中,您已为正则表达式添加了一个额外部分:-([0-9]+)
。这匹配-
,然后匹配一个数字。要捕获该数字,您需要将$2
放在目标中的某个位置:
RewriteRule ^find-teacher/([a-z-]+)-([0-9]+).php$ /find-teacher/subject-class-choose.php?school=$1&id=$2 [NC]
这会匹配/find-teacher/primary-school-123.php
之类的内容,并将其转换为/find-teacher/subject-class-choose.php?school=primary-school&id=123
。
最后两个笔记:
/
,即以{开头{ {1}} ^/
添加到标记中(例如R=temp
);这样,您就不必依赖PHP代码来告诉您请求的URL