在.htaccess文件中使用if语句

时间:2016-02-23 06:10:36

标签: regex .htaccess preg-match

使用.htaccess文件中的基本正则表达式代码,从网站网址中删除.php扩展名,如下所示:

# Externally redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

##Internally redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

这样工作正常,但我也有mail.php文件,用于发送电子邮件,并且无法将数据发布到此文件,因为来自.htaccess的规则,该路径如下所示: www.site/mail而不是www.site/mail.php。

那么,有没有办法在.htaccess中设置:

如果网址是:www.site/mail.php不使用规则来削减扩展名?

1 个答案:

答案 0 :(得分:1)

实际上,您的第一条规则不应删除任何.php请求的POST,否则您将丢失所有POST数据。您可以使用以下方法修复它:

# Externally redirect if not POST request
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L,NE]

##Internally redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]