.htaccess 为什么URL中有斜线会出现404错误?

8wtpewkr  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(117)

我想在年底斜线/的网址。
在我的网站上,如果我在结尾处输入斜杠/的URL,它会给出404错误。
我用下面的代码修改了.htaccess文件。仍然不工作。

AcceptPathInfo Off
RewriteBase /
RewriteCond %{THE_REQUEST} //
RewriteRule ^ - [L,R=404]
RewriteEngine On
RewriteRule \.php/.+$ [L,NC,R=404]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/([A-Za-z0-9-]+)/?$ inner.php?slug=$1 [NC,L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]
vatpfxk5

vatpfxk51#

RewriteRule ^([^\.]+)$ $1.php [NC,L]

这个(最后一个)规则无条件地重写所有 * 剩余 * 的URL(不包含点)以附加.php扩展名。但是,如果您在请求的URL上包含一个尾随的斜杠,例如. /foo/,那么它会将请求重写为/foo/.php(而不是/foo.php),这将导致404,这肯定是您的问题的原因。
您需要从捕获的子模式中排除(强制性的)尾随斜杠。例如:

RewriteRule ^([^.]+)/$ $1.php [L]

(* 旁白:* 当在正则表达式字符类中使用时,不需要反斜杠转义文字点,并且NC标志在这里是多余的,因为RewriteRule * 模式 * 无论如何都不区分大小写。
但是,在重写请求之前,您应该测试目标.php文件是否存在,否则您将得到由/requested-url.php触发的404,而不是/requested-url(实际请求的URL)。

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^.]+)/$ $1.php [L]

相关问题