2011-11-21 202 views
0

在我的页面中我有一个登录文件夹。当我输入domain.com/login/它使我正确地到文件夹。当我写domain.com/login它也开启了网页,但该网址变成domain.com/login/?cname=loginRewriteRule与文件夹冲突

我的另一主要环节是像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] 

回答

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,除了登录做重写规则的公司。

+0

谢谢你。这真的帮助我了解这些工作。然而,该公司只是一个例子,它可能是任何名称。我该如何改变它? – EnexoOnoma

+0

我加了这个'RewriteRule ^([a-z0-9] +)/ $ /profile/company-profile.php?cname = $ 1 [NC,L]'而不是你为我公司发布的东西,但它与'login'混淆 – EnexoOnoma

+0

将很快更新上面的答案 –

0

请确保您明白任何#的RewriteCond只适用于下一个RewriteRule。我不明白你为什么使用RewriteCond与REQUEST_URI匹配,而不是将它匹配为RewriteRule的一部分。

我也不明白你想用^/login?$ RewriteRule完成什么。我在猜'''需要被转义 - 否则,你的字面意思是要求它匹配“/login”或“/logi”。

由于上述问题的复杂性,我猜你的“domain.com/login”请求正在被包含“cname =”的第二个RewriteRule处理,尽管我很困惑,你也可以看到“company-profile.php”(假设你的问题可能只是一个疏忽)?

考虑到上述情况并试图简化这一点,我猜一切都应该落实到位。如果不是,请回复评论,我们会看到我们可以做些什么。

+0

事实是,我对htaccess不是很熟悉,我通过网络上的一些阅读来构建它。如果你应该发布我的代码应该如何,那将是非常好的。 – EnexoOnoma

+0

重写规则不是特定于.htaccess,而是更大的Apache配置的一部分。 http://httpd.apache.org/docs/current/rewrite/是一个很好的指导。看起来Ulrich已经给了你大部分你需要的东西。 :-) – ziesemer