2013-10-22 60 views
2

我用的.htaccess躲讓我的網站URL變量是這樣的:的.htaccess僅重寫,如果路徑包含數字和字母

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([A-Z0-9]+)$ index.php?music=$1 [NC,L] 

我能得到的唯一變量是包含字母和數字的唯一ID。所以我想創建一個規則來檢查GET變量是否包含字母和數字。

我想什麼:

http://www.website.com/123456ABCDEF > http://www.website.com/index.php?var=123456ABCDEF 

我不想要什麼:

http://www.website.com/123456 > http://www.website.com/index.php?var=123456 
http://www.website.com/ABCDEF > http://www.website.com/index.php?var=ABCDEF 

任何想法?謝謝!

回答

3

你可以調整正則表達式:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^((?!(?:[A-Z]+|[0-9]+)$)[0-9A-Z]+)$ index.php?music=$1 [NC,L,QSA] 

這將使:

  • /abc123
  • /987xyz

但它不會允許:

  • /hello
  • /777

更新:它基於從OP此評論:

What if I want to check if one particular word is in the URL value ? For example, I want to apply this rule, only if there is the word "version" in the value.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} version [NC] 
RewriteRule ^((?!(?:[A-Z]+|[0-9]+)$)[0-9A-Z]{13,})$ index.php?music=$1 [NC,L,QSA] 
+0

感謝您的回覆,但它不起作用。我嘗試了網址「www.website.com/hello」(價值中沒有數字,所以我不想重定向),但是htaccess仍然會將我重定向到'www.website.com/index.php?var=你好'... – Faks

+1

工程太棒了!非常感謝(我不能爲您的答案投票,沒有足夠的聲譽;)如果我想檢查URL值中是否有某個特定單詞,該怎麼辦?例如,我想應用此規則,只有在值中有「版本」這個詞時才適用。有任何想法嗎? – Faks

+0

超級!最後要感謝您的幫助,如果我想檢查價值的長度,我該怎麼辦?例如,我只想在長度> = 13時檢查該值。有這樣一個方法嗎?是否像{> = 13}?再次感謝。 – Faks

0

嘗試:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/([A-Z]+|[0-9]+)/?$ 
RewriteRule ^([0-9A-Z]+)/?$ index.php?var=$1 [L,NC] 

這隻會路徑ID爲index.php文件,如果ID包含數字和字母。

+0

感謝您的答覆,但它不起作用。在我嘗試URL www.website後,我上傳了您的代碼。com/hello'(值中沒有數字,所以我不想重定向),但是htaccess會將我重定向到'www.website.com/index.php?var=hello' – Faks

相關問題