【问题标题】:How to disable trailing slash appending?如何禁用斜杠附加?
【发布时间】:2016-04-09 12:34:03
【问题描述】:

我正在用 PHP、MVC 编写自己的网站,它使用路由(所有内容都重定向到 /index.php)。

网站的结构是这样的:

/module/
/module/catalog/
/module/catalog/entry.html

我的站点根目录中还有名为 /module/catalog/ 的真实文件夹。

只有当用户请求带有斜杠的 URL 时,我才需要 MVC 加载内容,否则 MVC 必须抛出 404 错误。 但是当我关注 /module/catalog 之类的 url 并且有一个具有这样地址的真实目录时,Apache 会自动附加斜杠,并且 MVC 继续工作,而不是给出 404 错误(应该是) . 如果没有这样的目录,则 URL 保持不带斜线并且我看到 404(这没关系)。

如何在第一种情况下禁用附加斜杠?我想使用 PHP 脚本以不同的方式处理带有和不带有斜杠的 URL。

根 .htaccess 中的DirectorySlash Off 完全没有效果。这是我的 /.htaccess:

Options -Indexes +FollowSymLinks
DirectoryIndex index.php

AddDefaultCharset utf-8

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301]

DirectorySlash Off

ErrorDocument 404 /errors/404.html
ErrorDocument 403 /errors/403.html

RewriteCond %{REQUEST_URI} !\/errors\/
# TODO: Remove PHP gere - it's only for testing!
RewriteCond %{REQUEST_URI} !\.(js|gif|jpg|png|css|txt|ico|php)$
# QSA says to overwrite GET values defined in target address string.
RewriteRule .* index.php [L]

【问题讨论】:

  • 不要自己做,检查 laravel 或 symfony

标签: php apache


【解决方案1】:

首先,让我先说,首先让文件夹反映您的 URL 重写可能不是一个好主意。

其他 MVC 将索引文件放在它们的类目录中,它们只是看起来像 404 页面的 HTML 页面。这样,如果用户使用斜杠请求它,他们将被重定向到显示 404 文本的 index.html 页面。

查看 CodeIgniter 核心文件夹中的“index.html”文件:

https://github.com/bcit-ci/CodeIgniter/tree/develop/system/core

【讨论】:

  • 好的,谢谢您的信息。但是是否有针对特定目标的解决方案:为第一个描述的情况禁用附加斜杠?
  • 这就是灵魂。你想要什么,一只手从他们的显示器上伸出来,如果他们打了一个斜线就扇他们一巴掌?您无法控制用户在 url 栏中输入的内容,您只能控制发回给他们的内容..
  • 我只需要配置 Apache 不重定向 /module/catalog 到 /module/catalog/ 。据我了解,这只能使用一些 htaccess 指令来完成(因为在启动 PHP 脚本之前会发生重定向)。
  • 好吧,你当然可以制作一个 index.php 页面,它会重定向到你原来的 404 页面。我知道这不是您希望的解决方案,但是所有 真正的 MVC 都这样做是有原因的..
  • 问题是,一个好的 MVC 无论有没有 htaccess 文件都应该可以正常工作。 htacess 是特定于 apache 的。如果您也希望能够在其他系统上使用它,请不要依赖 mod-rewrites。在 php 中做尽可能多的重定向。
猜你喜欢
  • 2011-01-04
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多