我正在尝试重写URL如下:
example.com/speciality_details.php?id=23&name=ent
至
example.com/specialities/23/ent
但我得到这个错误:
Not Found
The requested URL was not found on this server.
此外,尝试使用ErrorDocument处理请求时遇到404找不到错误。
这是我的.htaccess
文件
RewriteEngine on
RewriteRule ^doctor/([0-9]+)/([^/.]+)$ doctor_details.php?id=$1&name=$2 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L]
第一个RewriteRule
工作,但第二个不工作
请帮助我知道问题出在哪里。我应该如何重写代码?
1条答案
按热度按时间qyswt5oh1#
就像第一条规则一样(“有效”),不应该匹配URL路径上的斜杠前缀,前面的 condition(
RewriteCond
指令)是多余的,因为/specialities/23/ent
的URL不可能匹配物理文件(对吗?)在
.htaccess
中,RewriteRule
* 模式 * 匹配的URL路径不以斜杠开头,因为目录前缀(总是以斜杠结尾)已经被删除。因此,规则应该如下所示(并且没有
RewriteCond
指令):这将匹配
example.com/specialities/23/ent
的URL,如您的示例所示,并假设要重写的文件是文档根目录中的speciality_details.php
。NC
(nocase
)标志也应该是多余的,除非您期望sPeCiAlItIeS
的混合大小写版本。但是如果您期望sPeCiAlItIeS
的混合大小写版本,则最好通过重定向来解决,因为重写可能会导致重复内容(SEO)问题。确保在测试之前清除浏览器缓存。
尽管从您之前的问题编辑来看,您似乎已经尝试过不使用斜杠前缀,但当时您使用
/speciality/23/ent
,而不是/specialities/23/ent
作为示例请求URL -这显然不匹配。