我正在使用位于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方面我只是一个初学者。你知道解决方案吗?
答案 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]