[英]htaccess rewriterule directory redirect
当用户请求目录(如果文件存在)时,我正在使用htaccess加载文件,因此,如果转到/ login /,则加载/login.php等。
如果请求不是index.php,并且如果“ map”(文件)不存在,则应该加载user.php及其后面的地图,因此/ thomas /应该加载user.php?dir = thomas
这就是我想要的,但是我似乎无法使其正常工作,这目前是我的htaccess,它可以工作,但是login / register / logout也附加到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]
我希望像根一样发生同样的事情。 我想要它尝试,例如,当我转到/ settings / modules时,它首先检查/settings/modules/index.php是否存在,如果不存在,则检查/settings/modules.php是否存在,如果不存在,则检查设置.php存在(如果包含)来包含settings.php?args = modules,但我不知道这是否可行:\\
我希望我的意图很明确x)
尝试:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.