.htaccess删除扩展程序,但如果不存在则允许404

时间:2016-11-03 22:55:24

标签: php apache .htaccess

我已删除.php上的文件扩展名,用于我的网络服务器。我只是想让它看起来更漂亮。这很好用。

我有以下几页: sitename.com/portfolio sitename.com/portfolio/resume/file.html

htaccess有规则,以便当他们访问第二个链接时,只需将其转换为portfolio.php?resume& file = $ 1。这很棒。

好的,这是问题所在。因为我删除了扩展程序,如果用户使用traing斜杠将域名称为sitename.com/ portfolio / ,则会出现内部服务器错误。同样,如果他们只输入sitename.com/portfolio/r,他们也会收到错误,因为它不存在。我知道解决这个问题的一种方法是在htacess中为每个页面添加一个选项,但这似乎是一种不好的方法。

无论如何,我正在使用当前的htacess文件:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^portfolio/resumes/([^/]+).html$ /portfolio.php?resume&file=$1 [L,QSA]
RewriteRule ^portfolio/resumes$ /portfolio.php?resumes [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ /$1.php [L]
ErrorDocument 404 /404.php

如果我访问不存在的页面上的网站,如sitename.com/1或sitename.com/1.php,那么我得到我的404页面,但如果存在1.php DID,那么我会看到它,如果它确实存在,我键入sitename.com/1/或sitename.com/1/somethingelse然后而不是404(我期望)然后它给我一个内部服务器错误。有没有办法解决?我的语法错误?感谢

1 个答案:

答案 0 :(得分:1)

这是因为当您请求带有斜杠的uri时,例如: / uri / ,您的规则会将其重写为 /uri/.php 而不是 /uri.php这是一个未知/不受支持的目的地。您需要接受尾部斜杠作为可选字符。将您的规则更改为:

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