.htaccess:param url来清理url

时间:2017-01-30 00:00:06

标签: regex .htaccess mod-rewrite

我正在尝试将带有参数的丑陋网址变成一个不错的网址。目前我有:

  

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]

我是从一台在线生成器获得的,但是当我在网址中运行带有/ uk / 16的页面时,它只是崩溃了。

我做错了什么?

回复克里斯在下面的回复。所有这些都是可选的。

网址结构如下:

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)

3 个答案:

答案 0 :(得分:0)

您的正则表达式不正确。您的^/?$/?$表示请求只能有2 /个,每个都是可选的。您也没有使用任何捕获组,因此$1$2没有上下文。这是一个适用于您提供的示例的正则表达式:

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

如果uk可以使用任何2个小写字母:

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

您可以使用regex101查看正则表达式的运作方式。

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]

答案 1 :(得分:0)

您需要使用的是RewriteEngine On RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?reg=$1&area=$2&id=$3 [L] 文件中的所有内容:

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

这将为您留下所需的网址: {{#each containersToCreateChart}} some html that I need to do for each one then wait X milliseconds and do the next iteration {{/each}} 。在测试之前,请确保清除缓存。

答案 2 :(得分:-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