我从 IIS 世界来到 Apache,希望能在重写规则方面提供一些帮助。
我想要这个相对路径:
/index.php?go=order&id=12345
改写为:
/go/order/id/12345
另外,如果有更多的参数,它们应该转换为路径格式:
/index.php?go=order&id=12345&action=process
变成
/go/order/id/12345/action/process
请问我该如何实现?感谢您的任何意见。
我从 IIS 世界来到 Apache,希望能在重写规则方面提供一些帮助。
我想要这个相对路径:
/index.php?go=order&id=12345
改写为:
/go/order/id/12345
另外,如果有更多的参数,它们应该转换为路径格式:
/index.php?go=order&id=12345&action=process
变成
/go/order/id/12345/action/process
请问我该如何实现?感谢您的任何意见。
尝试将其放入您的虚拟主机配置中:
RewriteEngine On
# Start converting query parameters to path
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?[^\ ]+
RewriteCond %{QUERY_STRING} ^([^=]+)=([^&]+)&?(.*)$
RewriteRule ^(.*)$ $1/%1/%2?%3 [L]
# done converting, remove index.php and redirect browser
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?[^\ ]+
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/index.php/(.*)$ /$1 [R=301,L]
# internally rewrite paths to query strings
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^/([^/]+)/([^/]+)/?(.*) /$3?$1=$2 [L,QSA]
# No more path, rewrite to index.php
RewriteRule ^/$ /index.php [L]
这些规则将使得如果您在http://yourdomain.com/index.php?a=b&1=2&z=x
浏览器中输入 URL,浏览器将被重定向到http://yourdomain.com/a/b/1/2/z/x
. 当请求干净的 URL 时,第二组规则在内部将其重写回/index.php?a=b&1=2&z=x
. 如果要将这些规则放在 htaccess 文件中(在文档根目录中),则需要删除RewriteRule
's. 所以^/
需要^
在最后3条规则中。
请注意,如果您只是转到http://yourdomain.com/index.php
,而没有查询字符串,则不会重写任何内容。