2012-03-27 39 views
1

如果我註釋掉其他文件,文件中的每個規則都可以正常工作,但是它們中的兩個並沒有達到其中的任何一個目的,而是使網站變得醜陋。有關如何解決此問題的任何建議?謝謝。如何解決此.htaccess文件中的規則衝突?

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
# If the request is for a valid link 
RewriteCond %{REQUEST_FILENAME} !-l 
# do not do anything 
RewriteRule^- [L] 

# forward /blog/foo to blog.php/foo 
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC] 

# forward /john to user_page/profile.php?name=john 
RewriteRule ^((?!blog/).+)$ user_page/profile.php?uid=$1 [L,QSA,NC] 

回答

1

我終於想通了這一點。我修改了第二個重寫條件,因爲第二個重寫規則被重定向到一個不必要的url,即www.example.com/username到預期的有效url,看起來像這個www.example.com/user_page/profile.php?user=username

我還修改了最後一次/第二次重寫規則,如Safarov建議的那樣,它的工作原理!以下是完整的.htaccess文件。

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is for a valid directory 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
# OR If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
# OR If the request is for a valid link 
RewriteCond %{REQUEST_FILENAME} -l 
# do not do anything 
RewriteRule^- [L] 

# forward /blog/foo to blog.php/foo 
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC] 

# forward /john to user_page/profile.php?name=john 
RewriteRule ^(.+)$ user_page/profile.php?uid=$1 [L,QSA] 
+0

+1全力以赴。但是我已經在你的代碼中做了一個小修改,並且冒昧地編輯你的答案。 – anubhava 2012-03-27 20:56:36

+0

@anubhava,再次感謝。 – Chibuzo 2012-03-28 12:12:58

2

嘗試用RewriteRule ^(.+)$取代RewriteRule ^((?!blog/).+)$沒有必要檢查再次blog

+0

我已經試過了,它映射所有傳入的URL user_page/profile.php – Chibuzo 2012-03-27 18:48:11

+0

htaccess的工作流程是升轉降,所以就把這之前,你的所有規則。其餘的將轉發到profile.php – safarov 2012-03-27 18:51:57

+0

嘿!謝謝,我明白了! – Chibuzo 2012-03-27 19:05:49