mod_rewrite:动态重定向和目录阻止

时间:2014-02-09 16:03:53

标签: php apache .htaccess mod-rewrite redirect

我正在使用位于mysite.com/dir/.htaccess的.htaccess文件,如果可能的话,将mysite.com/dir/page重定向到mysite.com/dir/page.php并重定向到mysite.com/ dir /如果不可能的话。因此,任何“错误”的请求都将被重定向到主页面。我正在使用的代码是:

RewriteEngine on

# determine DIR_BASE dynamically
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=DIR_BASE:%1]

# see if .php is found
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f
RewriteRule ^(.*)$ $1.php

# if not found redirect to %{ENV:DIR_BASE}
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ %{ENV:DIR_BASE} [R]

这一切都运作良好。 (顺便说一下:我想确定文件的base-dir,因为我可能想稍后更改目录名,但不能更改文件)。我现在想要的是为用户阻止一些目录,因为它们包含不应该访问的php库。我怎么能...阻止目录mysite.com/dir/lib/*和mysite.com/dir/lib2/*并再次将它们重定向到mysite.com/dir/,就像我之前做的那样?我也想使用不像

的代码
RewriteRule ^lib/(.)* %{ENV:DIR_BASE}

将mysite.com/dir/lib/../page重定向到主页面,而不是mysite.com/dir/page应该属于的主页面。我非常尝试使用%{REQUEST_FILENAME}和%{REQUEST_URI},但在mod_rewrite方面我只是一个初学者。你知道解决方案吗?

1 个答案:

答案 0 :(得分:1)

这应该有效:

RewriteEngine on

# determine DIR_BASE dynamically
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=DIR_BASE:%1]

RewriteRule ^lib2?(/|$) %{ENV:DIR_BASE} [L,NC,R]

# see if .php is found
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC]
RewriteRule ^(.*)$ $1.php [L]

# if not found redirect to %{ENV:DIR_BASE}
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ %{ENV:DIR_BASE} [L,R]