2011-11-21 110 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