Apache mod_rewrite Rewriterule没有正则表达式?

时间:2012-05-04 12:07:08

标签: regex performance apache mod-rewrite

我一直在测试正则表达式并得出结论,这是有史以来发明的最有效的性能杀手。

我的问题是我的网站需要更好的网址,唯一正确的方法似乎是Apaches Rewriterule,但它需要与正则表达式一起使用,我想避免这种情况。

任何人都知道是否可以避免使用正则表达式,如果是,那么该怎么做?

我现在在.htaccess中使用的是:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

我如何摆脱正则表达式?

1 个答案:

答案 0 :(得分:2)

如果您事先知道要重定向的URL,我应该使用Redirect而不是Rewrite规则。 重定向没有正则表达式,但这意味着您需要指定要重写的每个URL,例如。

Redirect /BadUrl http://myhost.com/GoodUrl

但是,如果您想要的是将无限数量的现在不存在的页面重定向到Apache的新URL方案,我担心您会遇到正则表达式。但是,我应该同意Gerben的看法,IO更有可能降低服务器速度而不是正则表达式本身 - 我正在使用每天有数百万请求的系统,并且重写规则不是我们的主要性能问题......

如果基本重定向不起作用,并且您不想使用mod_rewrite函数,我建议将重定向逻辑完全从Apache移出。由于您已经在使用PHP,因此您可以使用PHP脚本替换普通的404文件,该脚本会将URL重写为所需的URL方案。它还可以让您的用户有机会更新他们的书签。