2016-12-05 52 views
0

我的網站被編碼在thigs如index.php?subtopic=register&step=1index.php?subtopic=account&page=login,等它發出的只是一個/account,或/register的方式,而不是從,輸入發送的,等...我是一個業餘的,當涉及到網絡,但我搜索了一點,我開始做一個.htaccess文件是這樣的:RewriteEngine敘述配置

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([^/]+)/?$ /index.php?subtopic=$1 [L,QSA] 
RewriteRule ^home/([^/]+)/?$ /index.php?subtopic=home [L,QSA] 
RewriteRule ^characters/([^/]+)/?$ /index.php?subtopic=characters&name=$1 [L,QSA] 
RewriteRule ^register/([^/]+)/?$ /index.php?subtopic=register&step=$1 [L,QSA] 

它視爲工作,但很快我意識到,有太多的變數來填補,它似乎並不正確。對不起,我認爲它應該很簡單,但我沒有搞清楚這個..

+0

你能這樣解釋'htaccess'風格的文件呢?您可以通過在該文件中放置明顯的語法錯誤來輕鬆檢查。那麼你真的得到一個錯誤? – arkascha

+0

還有一個常規提示:你應該總是喜歡把這樣的規則放在http服務器主機配置中,而不是使用'.htaccess'樣式文件。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器。它們僅作爲最後一種選擇,用於您無法控制主機配置的情況(閱讀:真正便宜的託管服務提供商),或者您擁有依賴編寫自己的重寫規則的應用程序(這是一個明顯的安全噩夢)。 – arkascha

+0

是的,我啓用了htaccess,我之前測試過它。如果沒有第一條規則「RewriteRule ^([^ /] +)/?$ /index.php?subtopic=$1 [L,QSA]」,則網站上的頁面無法通過點擊鏈接(重定向到/ pagename而不是index.php?subtopic = pagename) –

回答

0

從評論到問題變得很清楚,你正在尋求一種更靈活的方式來處理第一個斜槓(「字符」或「註冊」)之前的不同標記。

你當然可以抓住一個模式的標記也以靈活的方式:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/?$ /index.php?subtopic=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?subtopic=$1&name=$2 [L,QSA] 

當然,你必須確保這一戰略實際上是正確的所有請求匹配的模式。所以,你可能有一些例外添加到一般規則......


這將是一個稍作修改的版本,我會推薦給喜歡。使用可選的前導斜槓(^/?,而不是僅僅^)允許使用相同的規則在真實主機的配置,它總是最好使用.htaccess樣式文件中設置:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^/]+)/?$ /index.php?subtopic=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^/]+)/([^/]+)/?$ /index.php?subtopic=$1&name=$2 [L,QSA] 
+0

嗯 - 我想昨天嘗試了類似的東西,但是這個規則導致了內部錯誤。不知道爲什麼。此外,我使用htaccess只是因爲我不需要重新啓動Apache時,我需要測試其他規則。 [星期二Dec 06 14:46:24.199611 2016] [core:alert] [pid 5853] [client 192.168.0.3:53722] /var/www/html/.htaccess:RewriteRule:無法編譯正則表達式'^([ '/ + [[^ /] +)/?$' [Tue Dec 06 14:46:24.407634 2016] [core:alert] [pid 2974] [client 192.168.0.3:53723]/var/www/html/.htaccess:RewriteRule:無法編譯正則表達式'^([^ /])+)/([^ /] +)/?$',引用者:http://192.168.0。148/ –

+0

@FelipeMuniz重啓apache http服務器可以使用'graceful'重啓選項來完成,這個選項大概需要一秒鐘的時間,並且不會中斷任何當前活動的會話。有很多理由阻止使用'.htaccess'樣式文件,所以在找到解決方案之後,至少應該考慮移動事物。 – arkascha

+0

@FelipeMuniz對不起,模式中有一個明顯的錯字,感謝提到,修復它。 – arkascha

相關問題