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

时间:2018-01-05 09:47:50

标签: php apache .htaccess mod-rewrite

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

  

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扩展名的代码行。
结合我读过的引号和代码,它产生了矛盾。我不知道应该改变什么才能解决以下问题。有人有什么想法吗?请告诉我。谢谢!

1 个答案:

答案 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文件是否存在。