如何重定向网页但保留原始网址为htaccess

时间:2017-01-14 08:45:56

标签: php apache .htaccess mod-rewrite

我试图这样做:

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

一切似乎都一样......不知道为什么它会失败。

1 个答案:

答案 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