在 apache 中删除目录的尾部斜杠

在 apache 中删除目录的尾部斜杠

我有以下网址,www.example.com/advice/现在注意到网址末尾的斜杠了吗?我希望将其删除,变成类似这样的内容www.example.com/advice。现在,当我在浏览器中输入该网址时,我会被重定向到带有斜杠的网址,例如使用 curl。现在我知道添加了斜杠是因为 Advice 是一个实际的目录。

[steve@dev dev.www.example.com]$ curl -I  https://dev.www.example.com/advice -k
  HTTP/1.1 301 Moved Permanently
  Date: Fri, 25 Nov 2016 08:20:11 GMT
  Server: Apache/2.4.6 (CentOS)
  Location: https://dev.www.example.com/advice/
  Cache-Control: max-age=0
  Expires: Fri, 25 Nov 2016 08:20:11 GMT
  Connection: close
  Content-Type: text/html; charset=iso-8859-1

[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice/ -k
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 08:21:19 GMT
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.27
Set-Cookie: flarum_session=mfbou2hcbvcobhncnaqlvl9bm7; Path=/; HttpOnly
X-CSRF-Token: WV69M1oi8POqOcXi6MvwKhbJQ72Tmo2WpFn3oxwq
Content-Length: 10339
Cache-Control: max-age=0
Expires: Fri, 25 Nov 2016 08:21:19 GMT
Vary: Accept-Encoding
Access-Control-Allow-Origin: *.example.com
Connection: close
Content-Type: text/html; charset=UTF-8

我迄今为止尝试过


在 .htacess 中我尝试过:

DirectorySlash Off

导致 403 错误,没有斜线

[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice -k
  HTTP/1.1 403 Forbidden
  Date: Fri, 25 Nov 2016 08:53:15 GMT
  Server: Apache/2.4.6 (CentOS)
  Connection: close
  Content-Type: text/html; charset=iso-8859-1

我还添加了以下重写规则,但没有任何变化

RewriteRule ^.*(advice)\/$ $1 [L,R=301]

更多信息


现在advice我安装了一个论坛平台,在同一目录中我安装了一个 CMS,如下所示

├── advice
│   ├── admin.php
│   ├── api.php
│   ├── assets
│   ├── composer.json
│   ├── composer.lock
│   ├── config.php
│   ├── CONTRIBUTING.md
│   ├── index.php <-- Forum entry point
│   ├── LICENSE
│   ├── Procfile
│   ├── readme.md
│   ├── scripts
│   ├── storage
│   ├── Vagrantfile
│   └── vendor
├── assets
├── cms
├── codeception.yml
├── commands
├── composer.json
├── composer.lock
├── crontask
├── dropzone
├── email-helpers
├── favicon.ico
├── framework
├── gridfield-bulk-editing-tools
├── gridfieldextensions
├── index.php <-- CMS Entry point
├── kickassets
├── liveseo
├── minify
├── README.md
├── reports
├── setup.php
├── shortcodable
├── silverstripe-cache
├── siteconfig
├── _ss_environment.php
├── tests
├── themes
├── trait-loader
├── vendor
└── web.config

Apache 版本Apache/2.4.6 (CentOS)

你可以找到建议.htaccess 这里以及cms中的一个这里

如果 CMS 有帮助银条论坛是弗拉姆

答案1

如果您删除目录中的斜线,但仍希望返回目录索引文档(在该目录中),则需要通过内部重写索引文档来手动“修​​复”URL。(您基本上需要重做通过转动 ,您撤消了什么DirectorySlash Off。)

在根文件中的其他 mod_rewrite 指令之前尝试以下命令.htaccess

DirectorySlash Off

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule (.*) $1/index.php [L]

对于所有不以斜杠结尾的物理目录请求(index.php存在于该目录中),则内部重写为index.php

或者,您可以只附加尾部斜杠(通过内部重写),然后允许 mod_dir 向 发出子请求DirectoryIndex。例如:

RewriteRule (.*) $1/ [L]

假设您有一个DirectoryIndex集合(如果以前可以正常工作,您可能确实有),那么 mod_dir 将在内部重写请求(严格来说是子请求)从/advice//advice/index.php。但是,这现在是一个两阶段的过程,因此您不妨使用 mod_rewrite 一次性完成所有操作(除非您有不同的目录索引文档)。


以上是所有目录的一般情况。您可以更具体地检查相关目录/URL:

RewriteRule ^advice$ advice/index.php [L]

如果请求是针对,/advice则内部重写为/advice/index.php- 这不会检查它是否是一个目录,这只是假设。

相关内容