我正在尝试将一个带有参数的丑陋网址变成一个漂亮的网址。目前我有:
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/$2
以index.php?reg=$1&id=$2