.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 问题