htaccess rewriterule目录重定向

时间:2016-05-09 13:49:26

标签: apache .htaccess mod-rewrite

当用户请求目录时(如果文件存在),我正在使用htaccess加载文件, 所以,如果你去/ login /你加载/login.php等等。

如果请求不是index.php,并且如果“map”(文件)不存在,它应该加载user.php及其后面的地图,所以/ thomas /应该加载user.php?dir = thomas

这就是我想要的,但我似乎无法让它工作,这是目前我的htaccess,它的工作原理,但登录/注册/注销也附加到user.php,当我取消注释该行当(例如)加载索引时,它将导致无限循环。

RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index\.php [NC]
#RewriteRule ^(login|register|logout)(/|)$ $1.php [L,NC,QSA]
RewriteRule ^([^\?]*)$ user.php?dir=$1   [L,QSA]

提前致谢!

编辑: 我更改了.htaccess,以便检查php文件是否存在,如果是,则包含它。但现在我的文件夹/ settings /不再起作用了;(

RewriteEngine On

RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R,L,NC]

# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*?)(/(.*)|)$
RewriteCond %{DOCUMENT_ROOT}$1.php -f
RewriteRule ^(.*?)(/(.*)|)$ $1.php?args=$2 [L,QSA]


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

我希望像root一样发生同样的事情。我希望它尝试例如,当我去/ settings / modules时,它首先检查是否存在/settings/modules/index.php,如果不存在,检查是否存在/settings/modules.php,如果不存在,检查是否设置.php存在,如果存在,包括settings.php?args = modules但我不知道这是否可能:\

我希望我的意图很清楚x)

1 个答案:

答案 0 :(得分:0)

尝试:

RewriteEngine On

RewriteBase /
# let existing file/dir pass through untouched#   
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
#####
RewriteRule ^(login|register|logout)/?$ $1.php [L,NC,QSA]
RewriteRule ^(.+)$ user.php?dir=$1   [L,QSA]