重写与文件夹的规则冲突


RewriteRule conflict with folders

在我的页面我有一个登录文件夹。当我输入domain.com/login/时,它会正确地将我带到文件夹。当我写domain.com/login时,它也打开了页面,但url变成了domain.com/login/?cname=login

我的另一个主链接是像domain.com/company和工作正常。但是,如果我写domain.com/company/,它说没有找到对象。

我该如何解决这些问题?

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !^/domain.com/index.(php|html?)
# domain.com/login
RewriteRule ^/login?$ /domain.com/login/index.php
# domain.com/abc
RewriteRule ^([a-z0-9]+)?$ /domain.com/profile/company-profile.php?cname=$1 [NC,L]

听起来您想让domain.com/login/或domain.com/login带您到登录文件夹。下面的规则将确保所有文件夹以斜杠结尾,从而使domain.com/login工作。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301] 

下面的下一个规则将允许domain.com/company/工作。结合上述规则,它还将确保domain.com/company继续工作。

RewriteRule ^company/$ profile/company-profile.php?cname=company [NC,L]

你应该删除你的其他规则,因为它们是错误的。

编辑

根据您的最后一个响应将最后一个规则修改为

RewriteCond %{REQUEST_URI} !=/login/ [NC]
RewriteRule ^([a-z0-9]+)/$ profile/company-profile.php?cname=$1 [NC,L]

。对于除login之外的所有URI,重写company规则

确保你明白RewriteCond的任何#只适用于下一个rewriterrule。我不明白你为什么要用RewriteCond来匹配REQUEST_URI,而不是把它作为rewriterrule的一部分来匹配。

我也不明白你到底想用^/login?$ rewriterrule完成什么。我猜是'?'需要转义-否则,你实际上是在要求它与" /login "或" /logi "匹配。

由于上述问题的复杂性,我猜你的"domain.com/login"请求正在由包含"cname="的2nd rewriterrule处理,尽管我很困惑为什么你没有看到"company-profile.php"(假设你的问题可能只是一个疏忽)?

在考虑了上面的内容并尝试简化一下之后,我想一切都应该合情合理了。如果没有,请回复,我们会看看我们能做什么。