Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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重定向尝试_Apache_.htaccess - Fatal编程技术网

Apache 正在修复失败的.htaccess重定向尝试

Apache 正在修复失败的.htaccess重定向尝试,apache,.htaccess,Apache,.htaccess,我试着回答了大约10个现有的问题,但都没有用。使用中Salman A的答案,我创建了以下.htaccess文件: Options +FollowSymLinks RewriteBase / RewriteEngine On RewriteCond %{QUERY_STRING} !="" RewriteRule ^(.*) /$1? [R,L] …目标是获取如下url: http://www.example.com/index.php?c=web http://www.example.com

我试着回答了大约10个现有的问题,但都没有用。使用中Salman A的答案,我创建了以下.htaccess文件:

Options +FollowSymLinks
RewriteBase /
RewriteEngine On
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*) /$1? [R,L]
…目标是获取如下url:

http://www.example.com/index.php?c=web
http://www.example.com/web
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /(index\.php)?\?c=([^&\ ]+)
RewriteRule ^ /%3? [L,R]
…让它看起来像这样:

http://www.example.com/index.php?c=web
http://www.example.com/web
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /(index\.php)?\?c=([^&\ ]+)
RewriteRule ^ /%3? [L,R]
按照Salman A的回答,URL看起来像:

http://www.example.com/?c=web
然后,我在尝试剥离“?c=”零件时弄乱了一些东西——不幸的是,我不知道我到底弄乱了什么——然后我删除了.htaccess文件,因为我不想弄乱任何其他东西。现在,即使没有.htaccess文件,一些url——特别是我在测试Salman A答案时单击的三个url——仍然看起来像:

http://www.example.com/?c=web 
http://www.example.com/web
…即使我删除了.htaccess文件。三个问题:1)为什么尽管删除了.htaccess文件,更改仍然存在;2) 这是我需要担心的事情吗;3)如何修改.htaccess文件以使所有URL看起来像:

http://www.example.com/?c=web 
http://www.example.com/web
更新:这就是我所担心的。如果我搞砸了301重定向,新访问者又去了这个网站,他们会被搞砸吗?有没有办法将其取消缓存?

当你说“获取这样的url并使其看起来像这样”时,你的意思是让它在服务器上看起来像这样,还是让它在浏览器上看起来像那样(两件完全不同的事情)。请参阅以获得一些澄清

您实现的答案使服务器在不使用查询字符串的情况下查看请求。在URI
/index.php?c=web
通过URL/文件映射管道后,mod_rewrite大量生成:
/index.php
,删除查询字符串
?c=web
,最后web服务器获取
/index.php
并提供服务(无查询字符串)。当然,当所有这些都发生时,浏览器仍然显示着它被告知要显示的相同URL,
http://www.example.com/index.php?c=web
,因为它从未被告知其他,所以您仍然可以看到该URL

如果要更改浏览器看到的URL,则需要从外部将浏览器重定向到新URL。您可以使用以下内容:

http://www.example.com/index.php?c=web
http://www.example.com/web
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /(index\.php)?\?c=([^&\ ]+)
RewriteRule ^ /%3? [L,R]
因此,当您的浏览器请求
http://www.example.com/index.php?c=web
,此规则将与查询字符串匹配,并将浏览器重定向到结果
/web
,从而更改浏览器URL地址栏中的URL。浏览器现在看到这个新的URL,向服务器发出一个新的请求来获取这个新的URL。你可能想把它改回原来的样子,因为我猜你在
/web
上确实没有目录或文件。所以你要这样做:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?c=$1 [L]

这使得当有人请求
/web
时,服务器可以看到
/index.php?c=web

我一直在研究您提供的链接(以及Apache文档)。我想要一个外部重定向。我现在通过MAMP:New directions:Options+FollowSymLinks-MultiViews-RewriteEngine-on-RewriteBase/DR/添加行进行实验,没有任何变化。请求<代码>http://localhost:8888/DR/index.php?c=web仍然加载
http://localhost:8888/DR/index.php?c=web
并且仍然显示
http://localhost:8888/DR/index.php?c=web
在浏览器中。很抱歉,格式很糟糕,由于危险人物的限制,我不得不严厉地截断我的回复并编辑掉重要的信息。在这里包含更多信息的“正确”方式是什么?我应该把这一切都加到原来的问题上吗?注释格式/字符规则对深入的细节不是很有帮助。我试图真正理解这一点,而不是寻找一个快速剪切粘贴解决方案。再次感谢。@CL75您不能在评论中设置格式,您需要编辑原始问题以澄清您想要的内容。但是,将我的行添加到您的URL中,您需要根据需要定制我的示例。我的示例假设在
?c=something
前面没有任何内容。如果您有资料,我的示例需要修改,以便将DR包含在
%{the_REQUEST}
匹配中。它成功了(虽然它仍然为主页添加了
index.php
,但我想我可以解决这个问题。谢谢,如果您不介意的话,我还有几个问题。
%{the_REQUEST}忽略
/index.php
之前的所有内容?我试图理解为什么它与给定的=
`或
localhost:8888/index.php
一样工作。此外,我是否应该使用
R=301
标志?如果我这样做,那么这是否真的不会在用户的浏览器中取消缓存,除非他们手动取消缓存。我对创建这种半永久性更改犹豫不决es@CL75
%{THE_REQUEST}
是HTTP请求的第一行,它不包含协议或主机名信息。如果请求确实包含协议和主机名,这意味着它是对代理的请求,请参阅: