2013-07-01 194 views
6

是我的.htaccess文件多的htaccess重寫規則

Options -Indexes 
RewriteEngine On 
RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^([a-z0-9]+)$ /profile.php?username=$1 [L] 
RewriteRule ^([a-z0-9]+)$ /display.php?page=$1 [L] 

對於是否能夠正常工作的第一個代碼,並顯示如下: www.site.com/user

第二個不工作,通常是像這樣顯示www.site.com/display.php?page=10。我想顯示這樣的網頁www.site.com/article 我嘗試過不同的事情,沒有結果。請告訴我如何使用多個規則。也請給我一個關於如何在php中使用這個功能的建議,因爲我認爲我做的不是很好。我使用這個規則的PHP代碼:

<p><a class="button" href="/<?php echo $user_data['username']; ?>"> Profile</a></p> 

它的工作原理,但也許是一個更好的方法,使一個鏈接採取的htaccess的優勢。

回答

17

你有衝突的兩個規則,使用的模式是完全一樣,這意味着,除了只適用於第一條規則的條件,兩條規則完全不可區分。

鑑於這種網址:

http://www.site.com/blah 

是 「blah」 頁面或用戶?無法分辨,因爲兩個規則的正則表達式模式(^([a-z0-9]+)$)與「blah」匹配。因此,無論使用什麼,第一個將始終得到應用。您需要添加東西2加以區分,像包括URL中的「用戶」或「頁」:

http://www.site.com/user/blah 
http://www.site.com/page/bleh 

而且你的規則看起來像:

Options -Indexes 
RewriteEngine On 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [L] 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L] 
+1

謝謝。現在更清楚了。 –

0

我做這個工作喜歡這個。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /domain/index.php/$1 [C] 

#second condition and rule 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /domain/subdir/index.php/$1 [L] 
2
Options -Indexes 
RewriteEngine On 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [N] 
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L] 

使用[N](下一步)繼續添加規則,以相同的條件下 和[L](最後一個),以確定最後的規則

+0

https://www.cheatography.com/davechild/cheat-sheets/mod-rewrite/ –