查看域中的子文件夹 (.htaccess) 时出现问题



我在另一篇文章中读到了这些信息:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

。表示如果浏览器中具有指定名称的文件 不存在,或者浏览器中的目录不存在 执行下面的重写规则

所以我试图将其应用于我的 .htaccess 代码以删除.php扩展名和其他 URL 格式。代码如下:

#REWRITE LINKS
Options All +Indexes
#REDIRECT ORIGINAL DOMAIN TO WWW
RewriteEngine On
RewriteCond %{HTTP_HOST} ^noithateti.com [NC]
RewriteRule ^(.*)$ https://www.noithateti.com/$1 [R=301,NC]
#REWRITE LINKS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^product-details/([a-zA-z0-9_-]+)/([0-9]+)$ product-details.php?title=$1&id=$2 [L]
RewriteRule ^products/([a-zA-z0-9_-]+)/([0-9]+)$ products.php?title=$1&id=$2 [L]
RewriteRule ^result.aspx result.php [L]
RewriteRule ^([^.]+)$ $1.php [NC]
#RETURN 404 IF THE FILE CONTAINS .php
RewriteCond %{THE_REQUEST} "^[^ ]* .*?.php[? ].*$"
RewriteRule .* - [R=404,L]

但是,我无法查看域的子文件夹。例如:我无法查看 www.example.com/subfolder,因为我认为服务器在文件和现有文件夹之间混淆了。
在一行一行注释代码时,我发现问题出在这一行:

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

令人惊讶的是,这是我用来删除所有.php扩展的代码行。
结合我读过的引文和代码,它产生了矛盾。我不知道我应该改变什么才能解决以下问题。有人知道吗?请让我知道。谢谢!

RewriteCond只适用于下一个RewriteRule,而不是所有RewriteRule

您可以按如下方式制定规则:

Options All +Indexes
RewriteEngine On
RewriteCond %{HTTP_HOST} ^noithateti.com$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
#RETURN 404 IF THE FILE CONTAINS .php
RewriteCond %{THE_REQUEST} "^[^ ]* .*?.php[? ].*$"
RewriteRule ^ - [R=404,L]
#skip below rules for all existing files and directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^product-details/([w-]+)/([0-9]+)/?$ product-details.php?title=$1&id=$2 [L,QSA,NC]
RewriteRule ^products/([w-]+)/([0-9]+)/?$ products.php?title=$1&id=$2 [L,QSA,NC]
RewriteRule ^result.aspx$ result.php [L,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

另请注意,在添加扩展名之前,在上一个规则中使用RewriteCond %{REQUEST_FILENAME}.php -f来检查相应.php文件是否存在.php

最新更新