【发布时间】:2016-07-19 21:09:51
【问题描述】:
我尝试了很多,但没有运气。我的要求如下。
-
需要将 URL 从一个重命名为另一个
例如:
/checkout/idnumber/checkout_direct到/booking/idnumber/注意:id号是自动生成的
在重命名url时也需要获取相同的ID号(ID号会有所不同)
请帮我解决这个问题。 提前致谢。
【问题讨论】:
标签: .htaccess url apache2 rewrite rename
我尝试了很多,但没有运气。我的要求如下。
需要将 URL 从一个重命名为另一个
例如:/checkout/idnumber/checkout_direct 到 /booking/idnumber/
注意:id号是自动生成的
在重命名url时也需要获取相同的ID号(ID号会有所不同)
请帮我解决这个问题。 提前致谢。
【问题讨论】:
标签: .htaccess url apache2 rewrite rename
您在 .htaccess 文件中使用以下代码(请注意,这不是有效代码,因为如果您有 URL "/checkout/idnumber/checkout_direct" 这意味着您已经有了“干净的 url”,为此,您有一个 .htaccess 重写规则,例如清理 .php 并可能与此冲突):
RewriteEngine On
RewriteRule ^/?booking/([^/]+)/?$ /checkout/$1/checkout_direct [L,QSA]
#redirects from /checkout/*/checkout_direct to /booking/*/ where * == anything
如果您没有设置任何 .htaccess 规则,您的网址将如下所示:
/checkout.php?id_number=123&checkout_direct=true
而不是:/checkout/id_number/checkout(干净的 URL)。
为此,通常更好的做法(并且更容易)设置参数,例如:
/checkout.php?id_number=123
然后:
原始网址: http://www.example.com/checkout.php?id_number=1#id_number=123
所需的目标网址: http://www.example.com/booking/123/
.htaccess 语法:
RewriteEngine on
RewriteCond %{QUERY_STRING} id_number=1
RewriteRule ^checkout\.php$ /booking/? [L,R=301]
这里有一个很好的例子来说明如何使用 .htaccess:https://gist.github.com/ScottPhillips/1721489
希望对你有帮助!
更新
根据您的评论,我猜您的文件是“index.php”,对吧?这是重写规则:
RewriteRule ^example.com/checkout/([0-9]+)/?$/checkout_direct example.com/booking/$1
这将使来自 example.com/checkout/{any_number}/checkout_direct 的所有请求重定向到 example.com/booking/{any_number} 。或者:
RewriteRule example.com/booking/([0-9]+)/?$ ^example.com/checkout/$1/checkout_direct
我不太确定你想要 2 中的哪一个。
这是您在问题中想要的,但我认为您应该包含更多 RewriteRules 以指出哪个文件将“捕获”请求,即,一旦在“example.com/booking/111”中应该指向:
example.com/booking/111 => index.php?booking=111
为了捕捉请求并能够 $_GET 预订号和一切。 希望对你有帮助
【讨论】: