.htaccess:参数网址到清理网址



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

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)

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

^/(uk)/(d+)$

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

^/([a-z]{2})/(d+)$
您可以使用正则表达式

101来查看正则表达式的运行方式。

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]

您只需要在.htaccess文件中使用以下内容:

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

这将为您留下所需的 URL:http://myasite.com/uk/london/16 。只需确保在测试之前清除缓存即可。

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

最新更新