2017-01-30 41 views
0

我想把一個帶有參數的醜陋url變成一個漂亮的url。目前,我有:.htaccess:參數url來清潔url

http://myasite.com/index.php?reg=uk&area=london&id=16

,我想有像這樣:

http://myasite.com/uk/london/16

我已經使用這個的.htaccess嘗試:

RewriteEngine On 
RewriteRule ^/?$/?$ index.php?reg=$1&area=london&id=$2 [L,QSA] 

我從一個在線生成器中獲得的,但是當我在url中運行/ uk/16頁面時,它只是崩潰了。

我在做什麼錯?

回覆克里斯的回覆如下。所有這些都是可選的。 URL的

結構是像這樣:

myasite.com 
myasite.com/uk (if set, This will always be text and always 2 chars long) 
myasite.com/uk/london (if set, This will always be text, this will be any char length) 
myasite.com/uk/london/16 (if set, This will always be integer and any char length) 
+0

'reg'和'id'的可接受值是多少? Id可能只是一個整數?你做錯了什麼是正則表達式。 '/?$ /?'表示可以有2個可選的'/',沒有別的。 – chris85

+0

@ chris85在寫我的q時,我犯了一個小錯誤 - 請看新帖 – JamesG

+0

@ chris85 yup我想的很多。但我真的有點在我的頭上。不知道我在做什麼。我需要所有三個人的工作,但也不會崩潰,如果一個沒有設置。你能幫我嗎? – JamesG

回答

-1
RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/?$ index.php?reg=$1&id=$2 [L,QSA] 

我們正在改寫$1/$2/$1/$2index.php?reg=$1&id=$2

+0

無論誰做-1請評論! – Prakash

+0

謝謝,我會試試 – JamesG

0

你的正則表達式是不正確。您的^/?$/?$表示請求只能有2 / s,每個都是可選的。您也沒有使用任何捕獲組,因此$1$2沒有上下文。下面是會爲您提供的示例工作正則表達式:

^/(uk)/(\d+)$ 

如果uk可以是任何2個小寫字母,您可以使用:

^/([a-z]{2})/(\d+)$ 

您可以使用regex101看到你regexs將如何運作。

https://regex101.com/r/VyJE9d/1(您的規則)
https://regex101.com/r/VyJE9d/2

頁面的右側給出瞭解釋。

作爲重寫規則:

RewriteEngine On 
RewriteRule ^/([a-z]{2})/(\d+)$ index.php?reg=$1&id=$2 [L,QSA] 
+0

請參閱編輯。 :) – JamesG

+0

根據您的更新,您將需要有3條規則。請使用regex101鏈接,如果您對正則表達式提出疑問。 – chris85

+0

這是第一條規則的潛在正則表達式,https://regex101.com/r/VyJE9d/3。 – chris85

0

所有你需要用的就是這個在文件.htaccess

RewriteEngine On 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?reg=$1&area=$2&id=$3 [L] 

這將讓你與你所期望的網址:http://myasite.com/uk/london/16。在測試之前,請確保清除緩存。