0

我正在将此 .htaccess 代码用于 PHP 应用程序。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


RewriteCond %{REQUEST_URI} !^/(login|logout|public)($|/.*$) [NC]
RewriteRule . index.php [L,QSA]


RewriteRule ^login login.php?$1 [L]
RewriteRule ^logout logout.php?$1 [L]

如果我在域根目录中使用它,www.website.com那么它工作正常,但如果我在文件夹中使用它,www.website.com/app它会导致无限循环。,

关于我在这里做错了什么的任何想法?

此外,有没有办法websitename.com在给定的 .htaccess 中删除并使其完全动态化,这样它就可以按预期工作,而无需我为每个不同的网站手动输入域名。

RewriteEngine on 

RewriteCond %{HTTP_REFERER} !^http://(www\.)?websitename.com/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png|txt|pdf|zip|rar|psd|doc|docx|xml|csv)$ - [F,NC]
4

1 回答 1

0

问题是没有在以下 2 条规则中使用行尾锚:$

RewriteRule ^login login.php?$1 [L]
RewriteRule ^logout logout.php?$1 [L]

这会导致无限循环,因为源 URI/login和目标/login.php都匹配正则表达式:^login

用这些替换你的规则:

RewriteRule ^login/?$ login.php?$1 [L]
RewriteRule ^logout/?$ logout.php?$1 [L]
于 2013-05-16T14:16:55.963 回答