2017-01-30 42 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。在测试之前,请确保清除缓存。