.htaccess 错误:您所请求的网址(URL)无法获取系统提示

bxjv4tth  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(202)

我正在尝试重写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工作,但第二个不工作
请帮助我知道问题出在哪里。我应该如何重写代码?

qyswt5oh

qyswt5oh1#

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L]

就像第一条规则一样(“有效”),不应该匹配URL路径上的斜杠前缀,前面的 conditionRewriteCond指令)是多余的,因为/specialities/23/ent的URL不可能匹配物理文件(对吗?)
.htaccess中,RewriteRule * 模式 * 匹配的URL路径不以斜杠开头,因为目录前缀(总是以斜杠结尾)已经被删除。
因此,规则应该如下所示(并且没有RewriteCond指令):

RewriteRule ^specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L]

这将匹配example.com/specialities/23/ent的URL,如您的示例所示,并假设要重写的文件是文档根目录中的speciality_details.php
NCnocase)标志也应该是多余的,除非您期望sPeCiAlItIeS的混合大小写版本。但是如果您期望sPeCiAlItIeS的混合大小写版本,则最好通过重定向来解决,因为重写可能会导致重复内容(SEO)问题。
确保在测试之前清除浏览器缓存。
尽管从您之前的问题编辑来看,您似乎已经尝试过不使用斜杠前缀,但当时您使用/speciality/23/ent,而不是/specialities/23/ent作为示例请求URL -这显然不匹配。

相关问题