如果原始请求没有以正斜杠(/)终止,我的重写暴露GET变量时遇到问题。
这是我的规则:
# All requests are routed to PHP
RewriteRule ^(.*)$ framework/index.php?framework=$1&%{QUERY_STRING} [L]
如果我访问:
一切都很好。如果我访问:我被重定向到:
http://www.domain.com/folder/?framework=folder
是什么给出了?
答案 0 :(得分:2)
听起来您的网络根目录中存在/folder
。由于您尚未向Apache发送斜杠终止的URL,并且请求的资源是文件夹,因此DirectorySlash
指令强制重定向到更正的URL。
不幸的是,mod_rewrite
在您发出此重定向之前已按照您的请求进行操作,虽然它不会更改用于生成重定向的URI,但它对查询字符串所做的更改不会分开以mod_dir
知道不包含它们的方式。因此,当重定向发送回浏览器时,它会包含RewriteRule
生成的查询字符串。
对此的潜在解决方案(除了关闭DirectorySlash
之外,由于文档中列出的原因而不建议这样做)是作为规则集的一部分执行mod_dir
的工作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{HTTPS}s ^on(s)|off
RewriteRule [^/]$ http%1://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]
RewriteRule ^(.*)$ framework/index.php?framework=$1 [QSA,L]