.htaccess,重写与目录相同名称的文件名

丹尼·冈萨雷斯(Danny Gonzalez)

给定的文件结构如下:

|- .htaccess (1) 
|- portfolio.html
|- portfolio(dir) -|
                   |- .htaccess (2) 

我想将任何带有/ portfolio的链接重写为/portfolio.html。问题在于还存在一个名为Portfolio的目录。

这个问题与在这里回答的问题非常相似:
.htaccess,具有相同名称的目录和文件的正确重写,
但是不幸的是,这并不能完全解决我的问题。

以下是上述链接的可接受答案的建议解决方案:

解决方案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并删除目录存在测试

# Disable Automatic Directory detection
DirectorySlash Off

# Hide extension
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

将DirectorySlash设置为Off可以最好地解决此问题,但可能会破坏您实际需要自动DirectorySlash的站点的其他部分。


确实,上述链接堆栈溢出答案的答案确实可以解决问题,但前提是目录中没有与文件名同名的.htaccess规则,即上述.htacess(2)文件中的任何rewriteRule都可以阻止此问题。在职的。

谁能建议实现这一目标的方法?谢谢

阿努巴瓦

此规则应适用于您的htaccess (2)

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(.*?)/(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

# if .html exists then use it
RewriteCond %{DOCUMENT_ROOT}%{ENV:BASE}\.html -f [NC]
RewriteRule ^$ /%{ENV:BASE}.html [L]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

.htaccess,使用与目录相同的名称重写文件名

来自分类Dev

htaccess-重写目录名称相同的文件

来自分类Dev

.htaccess将所有子域重写为相同名称的目录

来自分类Dev

获取名称与bash中的目录相同的打开文件

来自分类Dev

允许访问特定文件,但在.htaccess的子目录中排除相同名称的文件

来自分类Dev

htaccess重写只获取文件名

来自分类Dev

htaccess 重写 - 无法识别文件名

来自分类Dev

htaccess重写为名称文件名中带有井号(#)的文件

来自分类Dev

htaccess删除文件扩展名并允许使用相同名称的文件夹

来自分类Dev

.htaccess在目录与php文件同名的情况下重写

来自分类Dev

如果存在相同名称的文件(在文件名末尾带有后缀),则在文件集中复制文件

来自分类Dev

从文档目录中获取包含相同名称但具有不同扩展名的文件列表。

来自分类Dev

Bash查找功能Ubuntu-在目录树中查找名称与其目录相同的文件

来自分类Dev

Bash查找功能Ubuntu-在目录树中查找名称与其目录相同的文件

来自分类Dev

正则表达式以捕获具有相同名称的文件名和文件夹

来自分类Dev

cp文件到具有相同名称的文件的目录

来自分类Dev

两个具有相同名称的应用程序-仅更改一个.C文件名?

来自分类Dev

合并包含相同名称文件的多个目录

来自分类Dev

.htaccess将文件名重写为页面

来自分类Dev

htaccess将网址重写为https并删除文件名

来自分类Dev

htaccess重写条件/在文件名中查找模式

来自分类Dev

.htaccess URL重写并与现有文件名冲突

来自分类Dev

htaccess将网址重写为https并删除文件名

来自分类Dev

htaccess 重写总是传递文件名而不是实际的 url

来自分类Dev

使用与pwd目录相同的名称在头上创建目录

来自分类Dev

Apache Rewrite (mod_rewrite) 无法重写,如果目录名与根目录下的另一个目录相同,例如 Linux 上的“lib”

来自分类Dev

使用目录名称作为列名称粘贴具有相同名称的单列文件

来自分类Dev

将来自不同目录的类似名称的文件分类为具有相同名称的单个文件

来自分类Dev

.htaccess重写,其中URL基本名称与目录名称相同

Related 相关文章

  1. 1

    .htaccess,使用与目录相同的名称重写文件名

  2. 2

    htaccess-重写目录名称相同的文件

  3. 3

    .htaccess将所有子域重写为相同名称的目录

  4. 4

    获取名称与bash中的目录相同的打开文件

  5. 5

    允许访问特定文件,但在.htaccess的子目录中排除相同名称的文件

  6. 6

    htaccess重写只获取文件名

  7. 7

    htaccess 重写 - 无法识别文件名

  8. 8

    htaccess重写为名称文件名中带有井号(#)的文件

  9. 9

    htaccess删除文件扩展名并允许使用相同名称的文件夹

  10. 10

    .htaccess在目录与php文件同名的情况下重写

  11. 11

    如果存在相同名称的文件(在文件名末尾带有后缀),则在文件集中复制文件

  12. 12

    从文档目录中获取包含相同名称但具有不同扩展名的文件列表。

  13. 13

    Bash查找功能Ubuntu-在目录树中查找名称与其目录相同的文件

  14. 14

    Bash查找功能Ubuntu-在目录树中查找名称与其目录相同的文件

  15. 15

    正则表达式以捕获具有相同名称的文件名和文件夹

  16. 16

    cp文件到具有相同名称的文件的目录

  17. 17

    两个具有相同名称的应用程序-仅更改一个.C文件名?

  18. 18

    合并包含相同名称文件的多个目录

  19. 19

    .htaccess将文件名重写为页面

  20. 20

    htaccess将网址重写为https并删除文件名

  21. 21

    htaccess重写条件/在文件名中查找模式

  22. 22

    .htaccess URL重写并与现有文件名冲突

  23. 23

    htaccess将网址重写为https并删除文件名

  24. 24

    htaccess 重写总是传递文件名而不是实际的 url

  25. 25

    使用与pwd目录相同的名称在头上创建目录

  26. 26

    Apache Rewrite (mod_rewrite) 无法重写,如果目录名与根目录下的另一个目录相同,例如 Linux 上的“lib”

  27. 27

    使用目录名称作为列名称粘贴具有相同名称的单列文件

  28. 28

    将来自不同目录的类似名称的文件分类为具有相同名称的单个文件

  29. 29

    .htaccess重写,其中URL基本名称与目录名称相同

热门标签

归档