RewriteRule与文件夹冲突

时间:2011-11-21 02:03:38

标签: php .htaccess

在我的页面中,我有一个登录文件夹。当我进入 domain.com/login / 时,我会正确地访问该文件夹。当我写 domain.com/login 时,它也会打开页面,但网址会更改为 domain.com/login/?cname=login

我的其他主要链接就像 domain.com/company 一样正常。但是,如果我写 domain.com/company / ,则找不到sais对象。

我该如何解决这些问题?

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]

2 个答案:

答案 0 :(得分:1)

听起来您想要将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]

即。除了登录之外的所有URI都执行重写公司规则。

答案 1 :(得分:0)

确保您了解任何#RewriteCond仅适用于下一个RewriteRule。我不明白为什么你要用RewriteCond匹配REQUEST_URI,而不是将它作为RewriteRule的一部分进行匹配。

我也不明白你要用^/login?$ RewriteRule完成什么。我在猜猜'?'需要转义 - 否则,您确实要求它与“/login”或“/logi”匹配。

由于上述问题的复杂性,我猜你的“domain.com/login”请求正在由包含“cname =”的第二个RewriteRule处理,尽管我很困惑为什么你不这样做请参阅“company-profile.php”(假设您的问题可能只是疏忽)?

在考虑了上述内容并尝试简化之后,我猜测一切都应该落实到位。如果没有,请回复评论,我们会看到我们能做些什么。