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
Apache 删除尾部斜线_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache 删除尾部斜线

Apache 删除尾部斜线,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我希望使用没有尾部斜杠的页面。因此,现在我希望我的URL带有尾随斜杠,可以重定向(使用.htaccess)到没有尾随斜杠的相同URL 我有两个.htaccess文件: <IfModule mod_rewrite.c> RewriteEngine On RewriteRule (.*) public/$1 </IfModule> 但是: example.com/public/page/view/2/ 重定向到: example.com/**D:/webserv

我希望使用没有尾部斜杠的页面。因此,现在我希望我的URL带有尾随斜杠,可以重定向(使用.htaccess)到没有尾随斜杠的相同URL

我有两个.htaccess文件:

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteRule (.*)  public/$1
</IfModule>
但是: example.com/public/page/view/2/

重定向到: example.com/**D:/webserver/**public/page/view/2

这显然不是我想要的…

您是否尝试添加:

RewriteBase /public
转到公用文件夹中的
.htaccess
文件,以获取:

<IfModule mod_rewrite.c>
    RewriteEngine On            
    RewriteBase /public

    RewriteRule (.*)/$ $1 [R,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f         
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>

重新启动发动机
基础/公共
重写规则(.*)/$$1[R,L]
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$index.php?url=$1[PT,L]

为什么您有几个.htaccess文件?该用户的重定向到public/$1存储在哪里?您很可能会面临重写规则指令,这会使事情变得复杂


在不了解您的设置的情况下,很难说您应该如何使用重写-您可以指定实际情况吗?

以下是Apache文档中的一个示例,您可以使用它来解决您的问题:

尾部斜杠问题

说明:

每个网站管理员都可以唱一首歌,讲述引用目录的URL的尾随斜杠问题。如果它们丢失,服务器将转储一个错误,因为如果您说/~qux/foo而不是/~qux/foo/则服务器将搜索名为foo的文件。因为这个文件是一个目录,所以它会抱怨。实际上,在大多数情况下,它都会尝试自行修复,但有时这种机制需要您模仿。例如,在您对CGI脚本进行了大量复杂的URL重写之后

解决方案:

这个微妙问题的解决方案是让服务器自动添加尾部斜杠。为了正确地执行此操作,我们必须使用外部重定向,以便浏览器正确地请求后续图像等。如果我们只进行内部重写,这将仅适用于目录页面,但当任何图像包含在具有相对URL的页面中时,会出错,因为浏览器将请求内嵌对象。例如,对/~qux/foo/index.html中image.gif的请求在没有外部重定向的情况下会变成/~qux/image.gif

所以,要做到这一点,我们要写:

RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo$  foo/  [R]
疯狂和懒惰的人甚至可以在homedir的顶级.htaccess文件中执行以下操作。但请注意,这会产生一些处理开销

RewriteEngine  on
RewriteBase    /~quux/
RewriteCond    %{REQUEST_FILENAME}  -d
RewriteRule    ^(.+[^/])$ $1/ [R]

Wordpress根据您的永久链接结构重定向。因此,对.htaccess的任何更改都没有什么帮助,因为Wordpress将为您添加/删除它们,并在.htaccess完成操作后生成一个wp_redirect()。在最坏的情况下,您将得到一个重定向循环

解决方案是使用关闭Wordpress重定向

// perhaps an if(is_something()) before here ...
add_filter('redirect_canonical', '__return_false');

您应该将其包装在if语句中,或者在这样的语句中对某个页面/目录/等执行检查。将上述内容直接放入函数文件将关闭wordpress重定向,并可能会导致中断。

我不确定如何解决您的问题,但我不确定这是否真的是您应该做的。根据我的理解,请求这样的url:实际上会将用户重定向到。使用尾部斜杠可以避免这种额外的重定向。该斜杠明确标识“myDir”是一个目录而不是一个文件。您是说后面的斜杠是某种正式/标准/默认符号的一部分吗。在这种情况下,我有一个类似的问题。如何重定向以添加尾部斜杠;-)由于您实际上并没有试图重定向到目录,所以尾部的斜杠根本帮不了您——事实上,它并没有做任何事情。你应该只使用你喜欢的东西,并且在使用上保持一致。你的意思是它不使用这一行就重定向,但不使用它重定向吗?此外,您的问题还不清楚您将“RewriteRule(.*)/$$1[R,L]”放在“.htaccess”文件中的什么位置。通过您的代码,我得到以下结果:example.com/page/view/1>>404 error example.com/page/view/1/>重定向到example.com/public/page/view/1,然后显示404消息。我已将其全部缩减为一个.htaccess文件。调试时,我意识到一些浏览器由于访问页面的历史记录而自动添加了尾随斜杠。清除我的互联网历史记录,添加rewritecond和rewriterule就成功了。
RewriteEngine  on
RewriteBase    /~quux/
RewriteCond    %{REQUEST_FILENAME}  -d
RewriteRule    ^(.+[^/])$ $1/ [R]
// perhaps an if(is_something()) before here ...
add_filter('redirect_canonical', '__return_false');