.htaccess 没有文件夹的根重写

Posted

技术标签:

【中文标题】.htaccess 没有文件夹的根重写【英文标题】:.htaccess Root Rewrite Without Folders 【发布时间】:2015-05-18 03:01:38 【问题描述】:

我花了无数小时寻找类似的问题,并找到了对我不起作用的解决方案。我有一个带有 'id' GET 变量的 index.php,可以将页面动态加载为 mydomain.com/[idVariableHere]

我的 .htaccess 代码有效:

RewriteEngine On
RewriteBase /

RewriteRule ^(js|css|images)($|/) - [L,NC]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d

RewriteRule ^([^/]+)/?$ /index.php?id=$1 [L,QSA]

但是,它不会阻止显示 /js/、/css/ 和 /images/ 文件夹。它干扰了最后一个 RewriteRule,我不知道如何解决这个问题。

我的目标是保持 mydomain.com/[idVariableHere] 的外观,并限制这些重要文件夹。请帮忙。

【问题讨论】:

【参考方案1】:

这样吧:

ErrorDocument 404 default
ErrorDocument 403 default

RewriteEngine On
RewriteBase /

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^([^/]+)/?$ index.php?id=$1 [L,QSA]

【讨论】:

该死。没用……其实和之前的效果一模一样。很近! :-( 什么不起作用?你在浏览器中输入了什么网址?在 chrome 开发工具中测试,看看哪个 URL 导致了 404? 抱歉含糊了!好吧,当我输入链接到 mydomain.com/index.php?id=contact 的 mydomain.com/contact 时,最后一个 RewriteRule 起作用了,但是当我访问 mydomain.com/images 时,它加载了 index.php 的布局但正文的页面是白色的。我认为它正在加载 /images.php (不存在)而不是 /images/ 文件夹。 您有一个名为images.php 的文件吗? /images/ 中是否有任何 .htaccess?上面的.htaccess中还有更多规则吗? images.php 不存在且 /images/ 中没有 .htaccess。这都位于根目录中。我创建的其他文件夹(如 /videos/)也会出现同样的问题。如果我访问 mydomain.com/videos/,我希望看到 /videos/ 的实际索引,但最后一个 RewriteRule 似乎取代了 mydomain.com/index.php?id=videos(/videos.php,它没有存在)。【参考方案2】:

据我了解,您希望使用 .htaccess 来阻止访问 /js/、/css/ 和 /images/ 文件夹。假设这些是在根目录中找到的。只需使用以下代码在每个文件夹中创建一个 .htaccess 文件:

deny from all

摘自:

deny direct access to a folder and file by htaccess

【讨论】:

你是对的,但是我的最后一个 RewriteRule 似乎仍然可以通过加载我的 index.php 来运行,因为它认为被阻止的文件夹是 _GET['id'] 变量。这个解决方案对我不起作用。 :-( 我希望澄清我的答案。删除当前的 .htaccess 文件并在以下文件夹中创建 3 个单独的 .htaccess 文件:/js/、/css/ 和 /images/。然后您可以访问您的根文件,但阻止访问其他文件。默认情况下,apache 会阻止任何更高的访问权限。 如果我这样做,我将失去对 mydomain.com/[idvariable] 的重写

以上是关于.htaccess 没有文件夹的根重写的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 与 EasyPHP:RewriteRule 不起作用

根域和子文件夹中的两个 htaccess 中的 404 问题

没有 .htaccess 的 Mod 重写

如果文件名减去ext,则覆盖.htaccess url重写行为。与网址相同

.htaccess 重写失败,不确定如何排除故障

在iis上使用Htaccess文件(Windows 10)