使用正则表达式的友好URL重定向

时间:2015-03-15 05:45:47

标签: .htaccess mod-rewrite

我有以下挑战,我有网站页面的友好网址:

/ subdir1 / subdir2 / UNIQUEID /

有些页面可以缓存为html(不是全部),所以我们将它们缓存在文件夹中的html文件中:

/cache/uniqueID.html

所以我需要只显示这些页面,如果它们存在于基于友好网址的缓存中,我的htaccess:

RewriteEngine On
RewriteBase / 
RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME}([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/$ !-f 
RewriteCond %{DOCUMENT_ROOT}/cache/$3.html -f [NC] 
RewriteRule ([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/$ /cache/$3.html [L] 

这有效,但有2个问题: 1)如果一个子目录名称有一个" - "或" _"不会工作。 2)如果最后" /"不存在不会工作。

此外,我不是一个regexpr精明,所以肯定有更好的方法来做到这一点,任何帮助真的很感激。 谢谢

1 个答案:

答案 0 :(得分:0)

你需要调整你的正则表达式以允许连字符和&下划线。同时删除多余的RewriteCond

RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L,NC] 

RewriteCond %{DOCUMENT_ROOT}/cache/$3\.html -f [NC] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ cache/$3.html [L]