2011-08-24 68 views
1

我現在有這樣的.htaccess統治正常工作:htaccess的問題,包括週期/句號

RewriteRule ^instructor/([A-Za-z0-9-]+)$ instructor.php?username=$1 [NC,L] 

然而,當我嘗試添加一個時期在網站上混了很多的規則打破所以我假設字符沒有正確逃脫:

RewriteRule ^instructor/([A-Za-z0-9-\.]+)$ instructor.php?username=$1 [NC,L] 

任何人指出我在正確的方向嗎?

更新

這似乎是什麼做的目錄結構。

的適用於本網站規則的另一個選擇如下:

## Registration 
RewriteRule ^instructor/register/?$ instructor-form/index.php [L] 
RewriteRule ^instructor/register/stage([1-5]+)$ instructor-form/stage$1.php [L] 

這些做工精細的(這裏的目錄是instructor-form/

然而,也有一個叫instructor/這些規則指向目錄到:

RewriteRule ^instructor/dashboard/?$ instructor/index.php [L] 
RewriteRule ^instructor/account-details/?$ instructor/account-details.php [L] 
RewriteRule ^instructor/change-password/?$ instructor/change-password.php [L] 

這些是在添加.時受影響的規則第一條規則。規則都是按順序進行的,並且在[A-Za-z0-9-] char塊中沒有.。當添加物理instructor/文件夾似乎無法訪問。

回答

1

你在你的問題中寫了這麼多的文字,但忘了提及重要的細節:什麼是真正的破碎?因爲我沒有明確的答案,因此我會基於迄今爲止提供的信息進行猜測。


RewriteRule ^instructor/([A-Za-z0-9-\.]+)$ instructor.php?username=$1 [NC,L] 

這個規則的問題是,它也將改寫已經重寫PHP文件:instructor/index.phpinstructor/account-details.phpinstructor/change-password.php

我認爲你是在中繼旗[L]太多..或不知道mod_rewrite和[L]標誌是如何工作的。這就是爲什麼你會遇到這個問題 - 你的模式中的點的規則會重寫已經重寫的URL。

有用的鏈接:RewriteRule Last [L] flag not working?


你需要一些條件增加(全局規則或特定條件僅此規則),以防止重寫已重寫URL或現有文件。

1.全球規則 - 在其他規則之前將其置於頂端的某個位置。請記住,這可能不會如預期取決於您的網站結構工作,重寫邏輯(例如,當你需要真正改寫請求已存在的文件或文件夾):

# do not do anything for already existing files 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 

2。具體條件爲僅規則:

一)不重寫,如果請求的URI是物理文件

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^instructor/([A-Za-z0-9-\.]+)$ instructor.php?username=$1 [NC,L] 

OR

B)不重寫PHP文件

RewriteCond %{REQUEST_URI} !.+\.php$ 
RewriteRule ^instructor/([A-Za-z0-9-\.]+)$ instructor.php?username=$1 [NC,L] 
+0

謝謝你爲你的詳細解釋,全球規則工作:) – lethalMango