我试图这样做:
domain.com/s/united-states
domain.com/s/singapore
domain.com/s/anything
将重定向到domain.com/s/
的网页,但保留原始网址:
domain.com/s/united-states
domain.com/s/singapore
domain.com/s/anything
我之所以这样做,是因为我正在domain.com/s/上构建搜索页面,并使用网址的端点作为搜索字词。我尝试了以下方法:
RewriteRule ^s/([a-zA-Z_-]+)$ /s/ [NC,NE,R,L]
有效,但不保留原始网址。
我试过了:
RewriteRule ^s/([a-zA-Z_-]+)$ /s/ [NC,NE,L]
哪个不起作用。我可以考虑一下吗?
重定向还需要在后面保留任何get参数,例如:
domain.com/s/primary-search-term?filter1=x&filter2=y
这种URL处理可以在像Airbnb这样的页面中看到:
https://www.airbnb.com/s/Singapore?guests=1&adults=1&children=0&infants=0&ss_id=th87ej7h&source=bb
我的.htaccess的片段如下:
## No directory listings
IndexIgnore *
## Can be commented out if causes errors, see notes above.
Options +FollowSymlinks
Options -Indexes
## Mod_rewrite in use.
RewriteEngine On
RewriteRule ^s/([a-zA-Z_-]+)$ /s/ [NC,NE,L]
如果它意味着任何东西,这是安装了SH404SEF的Joomla默认.htaccess的一部分。
更新: 我尝试了以下哪个在一个测试服务器上运行但在生产上失败了......
RewriteRule ^d/([a-zA-Z_-]+)$ /index.php?option=com_quix&Itemid=876&id=105&lang=en&view=page&fulladdress=$1 [L,QSA]
访问日志中的输出显示
[07/Feb/2017:08:42:57 +0000] "GET /d/singapore HTTP/1.1" 404 24732 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" www.domain.com:443 124.82.84.207
一切似乎都一样......不知道为什么它会失败。
答案 0 :(得分:0)
您需要删除专为外部重定向设计的R
flag,而这不会保留原始网址。您需要的是内部重定向。
如果需要,您还需要使用QSA
flag来保留查询字符串。它默认存在。所以:
var xhr = new XMLHttpRequest();
xhr.open("GET", "//fiddle.jshell.net/img/logo.png", true);
xhr.responseType = "arraybuffer";
xhr.onload = function(e) {
var arrayBufferView = new Uint8Array(this.response);
var blob = new Blob([arrayBufferView]);
var urlCreator = window.URL || window.webkitURL;
var imageUrl = urlCreator.createObjectURL(blob);
//window.URL.revokeObjectURL(imageUrl);
};
xhr.send();
但这里可能存在问题;您错过了传递的数据(例如<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^s/([a-zA-Z_-]+)$ /s/ [L]
</IfModule>
)。您可能希望将其映射到PHP脚本。要将其作为查询字符串传递,您可以执行以下操作:
united-states
这样您就可以将新的查询字符串参数(<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^s/([a-zA-Z_-]+)$ /s/?country=$1 [L,QSA]
</IfModule>
)与所有现有的QS参数合并(如果有的话)。
还有一件事; you won't need a IndexIgnore *
directive with Options -Indexes