.htaccess > 将所有子文件夹重定向到根目录忽略尾部斜杠

问题描述

我的天哪 - 我讨厌 .htaccess ......并且不明白任何东西到底是如何工作的。 我试图忽略“子文件夹”并将它们用作访客识别符。 例如:

User types > http://subdomain.domain.com/guest_id

Server sends > http://subdomain.domain.com/index.PHP

browser shows > http://subdomain.domain.com/guest_id

我的 htaccess 文件

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.PHP [NC]

代码效果很好......除非有一个斜杠。 在这种情况下,所有文件都用作“index.PHP”。 主 Index.PHP 显示正常,但所有外部脚本 / css / 等都作为 /guest_id/index.PHP(因此...不加载)。

仅供参考,可能存在冲突,因为我的“子域”实际上是在隐形服务 domain.com/event/

我一直在尝试如此多的排列……但没有真正了解 htaccess 的工作原理。

非常感谢您的帮助。 1,000 提前致谢! 达米安

解决方法

当您拥有 http://subdomain.domain.com/guest_id/ 等 URL 并且为您的 css/js/images 使用相对链接时,浏览器会尝试通过在链接前加上当前路径来解析所有链接,因此 {{1 }} 解析为 src='image.png' 而不是 http://subdomain.domain.com/guest_id/image.png

您可以有一个规则来强制删除所有非目录 URL 末尾的尾部斜杠。

http://subdomain.domain.com/image.png

您也可以将其添加到页面 HTML 的 RewriteEngine On # Unless directory,remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/+$ RewriteRule ^ %1 [R=301,NE,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L] 标记下方:

<head>

这样每个相对 URL 都是从该基本 URL 而不是从当前页面的 URL 解析的。