apache - .htaccess 使用现有目录重写规则
问题描述
.htaccess
我的网站根目录上有以下文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)/?$ /index.php?t=$1 [L]
这意味着,对于某些链接,例如
www.website.com/foo
www.website.com/bar
它将在内部被替换为
www.website.com/index.php?t=foo
www.website.com/index.php?t=bar
问题是:这个目录之一(比如,bar
)存在,我希望能够使用链接www.website.com/bar/file.pdf
,所以我不得不修改.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([^/]+)/?$ /index.php?t=$1 [L]
我删除了以 结尾的行!-d
,这意味着“如果目录不存在”。但现在我明白了
www.website.com/bar/index.php?t=bar
那我怎么能两者兼得
www.website.com/bar
www.website.com/bar/file.pdf
第一个重定向(内部)www.website.com/index.php?t=bar
和第二个指向正确的文件?
解决方案
如果 /bar/index.php 存在,你可以试试这个:
RewriteEngine On
#
# rule 1
#
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . %{REQUEST_FILENAME}/index.php [QSA,L]
#
# rule 2
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)/?$ /index.php?t=$1 [L]
这样,如果目录 /bar/ 存在,它就会被第一条规则明确地重写为 /bar/index.php。同时,/bar/file.pdf 不会被触动,因为文件存在。
推荐阅读
- reactjs - Expo 无法在 Typescript 中的 Visual Studio 代码上自动导入 React-native
- android - 如何在不克隆整个 android 库的情况下在 Android Studio 中构建部分 Android 源代码?
- typescript - 如何输入这个 Maybe 函子?
- excel - 动态查找单元格中的多个值(逗号分隔)并将相应的 ID 返回到单个单元格(逗号分隔)
- c# - Windows 服务中的连续异步 Ping
- python - 如何定义具有列表属性的 python 类和接受可变参数的类构造函数?
- python - 如何停止分配前引用的 UnboundLocalError
- tensorflow - 如何使用所有 cpu 核心在 keras 中训练模型
- python - 如何使用从小部件文本框中输入的单词来搜索数据框,然后使用 python、ipywidgets 显示搜索结果?
- powershell - Powershell - Active Directory 不返回属性值