将 .../?token=xx-xxx 转换为 .../xx-xxx

将 .../?token=xx-xxx 转换为 .../xx-xxx

我有一个删除 index.php (codeigniter) 的 htaccess 文件。我在使用 Paypal 时遇到了问题,因为返回的 URL 使用查询字符串,这在 codeigniter 中很麻烦。

这是我的 htaccess 文件:

RewriteEngine on
RewriteBase /

# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

我想要重写以下示例 url-s:

http://.../site/bookingconfirmed/?token=EC-56G61173NH540131H

http://.../site/bookingconfirmed/EC-56G61173NH540131H

http://.../site/bookingdeclined/?token=EC-56G61173NH540131H

http//.../site/bookingdeclined/EC-56G61173NH540131H

关于如何做到这一点,有什么好的想法吗?

答案1

像这样:

RewriteCond %{QUERY_STRING} token=([^&]+) [NC]
RewriteRule ^(site/booking.*)/?$ $1/%1? [L]

这也会确保尾部斜杠也到位,因此请求/site/bookingconfirmed?token=EC-56G61173NH540131H也会正常工作。并且它会丢弃查询字符串 - 我假设其中没有其他需要保留的内容?

答案2

类似这样的情况,未经测试

RewriteEngine on
RewriteBase /

# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]

RewriteRule ^site/(bookingconfirmed|bookingdeclined)/\?token\=(.*)$ /site/$1/$2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

相关内容