mod_rewrite .htaccess重写匹配带或不带文件扩展名

时间:2014-01-09 03:44:58

标签: regex apache .htaccess mod-rewrite rewrite

我正在使用php脚本来匹配网站的请求链接。我目前正在'jcole/''jcole'进行匹配。不过,我希望能够在"jcole".php|.html|.htm),“jcole /”和“jcole”上进行匹配。我希望这个匹配对于文件扩展名可能是不可知的,也不关心名称中是否有句号。(例如我希望能够匹配“j.cole”)

目前我的.htaccess配置如下:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*\.html)$ /loadlink.php=link=$1 [L,QSA]
RewriteRule ^(.*)/?$ /loadlink.php?link=$1 [L,QSA]

1 个答案:

答案 0 :(得分:0)

方式最好从php中完成所有这些操作。正则表达式无法做你想做的一切,尤其是必须处理名字中的任意时期。所以你只需要第二个规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /loadlink.php?link=$1 [L,QSA]

请注意,重写条件仅适用于紧随其后的RewriteRule

这会将所有内容发送到“link”参数,只删除任意尾部斜杠(如果存在)。由loadlink.php脚本决定是否删除名称中的.php或随机句点。