【发布时间】:2014-08-18 10:51:52
【问题描述】:
给定一个文件结构如下:
|- .htaccess (1)
|- portfolio.html
|- portfolio(dir) -|
|- .htaccess (2)
我想将任何与 /portfolio 的链接重写为 /portfolio.html。问题是还存在一个名为portfolio的目录。
这个问题与这里回答的问题非常相似:
.htaccess, proper rewriting of directory and file with same name
但不幸的是,这并不能完全解决我的问题。
以下是上述链接接受答案的建议解决方案:
解决方案 1:手动重新路由对投资组合目录的请求以删除斜杠。
# Manually re-route portfolio/ requests to portfolio
RewriteCond %{REQUEST_FILENAME} portfolio/$
RewriteRule ^(.*)/$ $1
# Hide extension
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
这样做的缺点是您必须将“投资组合”边缘案例直接硬编码到重写规则中,并且仍然会导致浏览器首先被重定向到投资组合/
解决方案 2:设置 DirectorySlash Off 并删除目录存在测试
# Disable Automatic Directory detection
DirectorySlash Off
# Hide extension
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
设置 DirectorySlash Off 将最好地解决此问题,但可能会破坏您实际需要自动 DirectorySlash 的站点的其他部分。
确实,上述链接堆栈溢出答案的答案确实解决了问题,但前提是目录中没有与文件名同名的 .htaccess 规则,即显示的 .htacess (2) 文件中的任何 rewriteRule以上停止了这个工作。
任何人都可以提出实现这一目标的方法吗? 谢谢
【问题讨论】:
标签: regex apache .htaccess mod-rewrite