.htaccess并在URL中删除文件名

时间:2013-10-01 02:32:15

标签: php .htaccess mod-rewrite url-rewriting rewrite

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

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

我测试了这个,它在我的网站上正常运行。我担心的是该网站将收到来自世界各地的100,000多次点击...这个.htaccess重写是否会导致我的服务器过载?

几个月前我在.htaccess中搞乱自定义URL重写,在另一个项目上,它一直在服务器上重载内存。

有没有办法保护这种情况不发生?或者在.htaccess中这种重写是不是问题?

1 个答案:

答案 0 :(得分:1)

阅读“贪婪”和“懒惰”正则表达。你的RewriteRule的第一段是懒惰的(比贪婪更好);但它仍然足够精致,以确切知道它在寻找什么。

贪婪需要大量的记忆力。你可能想要它[QSA,NC,L]

QSA将添加任何?query=strings,NC强制URL忽略该情况,L表示它是最后一次重写规则,直到下一次重写条件为止。


将它包装在IFModule中非常重要,如果Rewrite无法正常工作,则不希望服务器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>