我在另一篇文章中读到了这些信息:
RewriteCond%{REQUEST_FILENAME}! - f
RewriteCond%{REQUEST_FILENAME}!-d...表示如果浏览器中具有指定名称的文件 不存在,或者浏览器中的目录不存在 进入下面的重写规则
因此,我尝试将其应用于我的.htaccess代码,以删除.php扩展名和其他网址格式。代码如下:
#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扩展名的代码行。
结合我读过的引号和代码,它产生了矛盾。我不知道应该改变什么才能解决以下问题。有人有什么想法吗?请告诉我。谢谢!
答案 0 :(得分:1)
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
文件是否存在。