.htaccess 并在 URL 中删除文件名


.htaccess and dropping filename in URL

我目前正在尝试从我网站上的URL中删除文件名(.php),并遇到了以下.htaccess代码:

# Remove filename extension
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]

我已经对此进行了测试,它在我的网站上正常工作。 我担心的是该网站将收到来自世界各地的 100,000+ 次点击......此 .htaccess 重写会导致我的服务器过载吗?

几个月前,我在另一个项目中弄乱了.htaccess中的自定义URL重写,并且它使服务器上的内存过载。

有没有办法防止这种情况发生,或者这是在 .htaccess 中进行这种类型的重写不是问题吗?

阅读"贪婪"和"懒惰"正则表达式。重写规则的第一段是懒惰的(这比贪婪好);然而,它仍然足够精致,可以确切地知道它在寻找什么。

贪婪需要大量的内存。您可能希望将其设为[QSA,NC,L] .

QSA 将添加任何?query=strings,NC 强制 url 忽略大小写,L 表示它是在下一次重写条件之前要检查的最后一个重写规则。


将其包装在 IFModule 中非常重要,如果重写工作不正常,请不要出现服务器 500 错误。 RewriteBase 会告诉它从 .htaccess 文件所在的文件夹的根目录中获取它所寻求的文件。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^([^'.]+)$ $1.php [QSA,NC,L]
</IfModule>