php - 如何禁用尾部斜杠附加?

标签 php apache

我正在用 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]

最佳答案

首先,让我首先声明,拥有反射(reflect)您的 URL 重写的文件夹可能不是一个好主意。

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

检查 CodeIgniter 的 Core 文件夹中的“index.html”文件:

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

关于php - 如何禁用尾部斜杠附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615850/

相关文章:

javascript - 传递 while 循环内部的输入类型标记的值,其中 while 循环位于 php 内部

php - removeClass ("has-error")当字段更改时 Bootstrap、javascript

delphi - Indy "Could not load SSL Library"与 Delphi 2007/Apache

php - 我的 php session 文件夹中不需要的 session 文件

Apache mod_proxy_uwsgi 和 unix 域套接字

android - Apache CentOS 上的 COMODO SSL 证书

java - 用于连接 mysql 数据库的 SSLException

PHP MySQL (PDO) CREATE TABLE 不创建表(实际上什么都不做)

php - 从 ASP 转换为 PHP

php - 使用 PHP 可以在表单内自动换行文本区域吗?