htaccess:重定向,但不是文件夹root或index.html(阻止循环)

时间:2016-09-17 06:22:16

标签: php .htaccess mod-rewrite

我正在与htaccess战斗,我找到了一些我讨论案例的页面 - 但不完全正确,所以我需要帮助。

我的网页上有一个登录系统,带有php。所以每个.html页面在发送之前都必须发送到一个php脚本,该脚本测试用户是否已登录,成功转发到请求的.html页面,而不是登录页面(index.html) )。

我有不同的语言文件夹,并将我的.htaccess放在所有这些文件夹的根目录中,我希望所有文件夹只有一个.htaccess。

文件夹结构:

/ members-manager / web / $ country / 这里是.htaccess

这就是我已经成功检查登录的方法,但我得到了一个循环:

RewriteRule ^(.+)$ members-manager/service/validate-user-login-for-url.php?url=%{REQUEST_URI} [L,QSA] 

任何tipps?

谢谢!

-------------更新,更具体地说明问题:-------------

我更好地描述了这个过程:

网址(例如" www.domain.com/members-manager/web/en/launch.html")

=>

.htaccess: - >转发到PHP以验证登录

=>

成员的管理器/服务/验证用户登录换url.php?URL =%{REQUEST_URI}

=>

PHP:用户是否已登录?如果是:转发回原始网址(%{REQUEST_URI})

=>

URL(%{REQUEST_URI})

STOP。

但是:我的.htaccess重写规则再次匹配,所以循环正在进行:-( 我怎么能写一个条件,不要再次重写网址"来自" PHP脚本?

1 个答案:

答案 0 :(得分:2)

如果我理解你是正确的,那么你在每个"国家/地区都有.htaccess文件。文件夹,以避免该循环,您只需要在路径的开头添加/

RewriteRule ^(.+)$ /members-manager/service/validate-user-login-for-url.php?url=%{REQUEST_URI} [L,QSA]

但是如果你只在你的根文件夹中放入一个.htaccess文件并将此规则添加到.htaccess文件中,可能会有更好的解决方案

RewriteRule ^members-manager/web/(.+)/(.+)$ members-manager/service/validate-user-login-for-url.php?url=members-manager/web/$1/$2 [L,QSA]