重写上移目录

时间:2014-04-16 14:20:45

标签: regex apache .htaccess mod-rewrite rewrite

我有一个重写规则,如果你输入:

  

www.whatever.com/profile-one.php

这是你看到的网址,但实际的模板页面是:

  

www.whatever.com/profile.php

以下是htaccess中的行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)([^/])$ http://www.whatever.com/$1$2/ [R=301,L]
RewriteRule profile-(.*)\.php$ profile.php?name=$1

我的问题是,如果您访问的网址如下:

  

www.whatever.com/second/profile-one.php

即使“第二个”目录中不存在profile.php模板,它仍会尝试恢复配置文件页面。什么是防止这种情况的最佳方法?

1 个答案:

答案 0 :(得分:0)

这是由于错误的正则表达式而发生的。您需要在第二条规则中使用开始锚点:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)([^/])$ http://www.whatever.com/$1$2/ [R=301,L]

RewriteRule ^profile-(.*)\.php$ profile.php?name=$1 [L,QSA]