Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess正在重写不存在的URL_Apache_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

Apache .htaccess正在重写不存在的URL

Apache .htaccess正在重写不存在的URL,apache,.htaccess,redirect,mod-rewrite,Apache,.htaccess,Redirect,Mod Rewrite,目前,我正在与一些人合作,他们喜欢在社交媒体上发布短URL以进行营销 他们有https://www.example.com/folder/subfolder 对于他们的营销,他们希望https://www.example.com/mysuperbuzzword 这将指向第一个URL,但在浏览器中,您仍会看到较短的URL 我的第一个想法是在.htaccess中添加一个重写规则 类似于重定向301/mysuperbuzzword/folder/subfolder/这样的方法可以工作,但URL会发生变

目前,我正在与一些人合作,他们喜欢在社交媒体上发布短URL以进行营销

他们有https://www.example.com/folder/subfolder

对于他们的营销,他们希望https://www.example.com/mysuperbuzzword 这将指向第一个URL,但在浏览器中,您仍会看到较短的URL

我的第一个想法是在.htaccess中添加一个重写规则

类似于重定向301/mysuperbuzzword/folder/subfolder/这样的方法可以工作,但URL会发生变化

我读了一些书,发现了[p]旗。然后我试了一下:

重写cond%{REQUEST_URI}^/vanityurl 重写规则^.*$/文件夹/子文件夹[P]

我现在遇到的问题是,因为/vanityurl不存在,所以我没有重写,而是得到了一个404错误

我一直在使用一个.htaccess规则检查工具测试我的规则,它显示的URL看起来是正确的,但同样,我只得到了一个404


此外,如果使用标志[PT],则会找到资源,但地址栏中的URL会更改。

您使用永久重定向进行了测试。永远不要那样做。它由浏览器缓存,浏览器将不再向服务器发出请求。这是可能的,因为这样的重定向应该是。。。好永久的如果必须测试重定向,请使用临时重定向302测试重定向,如果一切正常,请稍后更改重定向

使用mod_rewrite,您可以做三件事:

进行内部重写。如果您在内部将url a重写为url b,则用户会看到url a,但url b正在服务器上执行。 执行外部重定向。如果您从外部将url a重定向到url b,您将返回一个响应:请改为请求url b。。然后,浏览器使用url b向服务器发送另一个请求,并相应地更改地址栏中的url。 执行代理请求。如果将url a代理到url b,则用户请求url a。然后服务器打开http连接并请求url b。然后,它等待响应并将其传回客户端。通过mod_重写来做这样的事情是非常昂贵的。 您只想做的是:

RewriteRule ^vanityurl$ /folder/subfolder [L]

这是一个简单的内部重写。

只需在RewriteRule中添加一个带有代理标志的尾随斜杠即可。RewriteCond%{REQUEST_URI}^/vanityurl RewriteRule^.*$/folder/subfolder/[P]