2017-08-10 82 views
0

我有這樣的代碼:簡單的.htaccess重寫規則返回「未找到」的問題

Options -Indexes 
Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^referral/([0-9]+)/?$ /referral.php?code=$1 [NC,L] 

它應該做兩件事情:

不同的格式都試過了,但同樣的錯誤出現:

未找到

請求的URL /referral/[email protected]此服務器上未找到。

的Apache/2.4.7(Ubuntu的)在端口443

服務器

的第一行代碼單獨工作正常。

回答

1

觀看其他相關問題後(特別是this one),我終於得到它通過添加以下行的工作:

Options -MultiViews 
2
RewriteRule ^referral/([0-9]+)/?$ /referral.php?code=$1 [NC,L] 

RewriteRule圖案(即^referral/([0-9]+)/?$)不匹配的形式是 「與referral/[email protected]結尾的地址」 的URL。對於那些你需要像下面這樣來代替:

RewriteRule ^referral/([[email protected]]+)$ /referral.php?code=$1 [L] 

這假設URL的電子郵件地址「結尾」,但在其他方面完整的URL。正則表達式[0-9]+只能匹配數字,而不是電子郵件地址(字母,數字,「@」,「。」等),您似乎需要。

我也刪除了NC標誌,並將大小寫不敏感納入正則表達式,因爲我假設只有電子郵件地址可以混合大小寫,而不是URL路徑?

+0

還是同樣的錯誤。你的代碼更有意義。你對整個網址是正確的。 – Maleka

+1

請求「example.com/referral.php?code = test @ email.com'是否有效?你的'.htaccess'文件中是否有其他指令? – MrWhite

+0

example.com/[email protected]工作正常,htaccess包含只是選項 - 索引 選項+ FollowSymlinks RewriteEngine on RewriteRule referral /([a-zA-Z0-9。@ - ] + )$ /referral.php?code=$1 [L] – Maleka