问题描述
我的天哪 - 我讨厌 .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 解析的。