.htaccess重写同一文件夹中的多个url

6qqygrtg  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(206)

我想重写一些网址,但因为我是一个.htaccess刷新,我不知道如何使自己。
到目前为止我已经:example.com/page/AAA0001/?id=78324#78324现在该页正在从AAA0001/index.php加载,我需要什么文件夹名称ex:AAA0001AAA0002index.php应该从example.com/page/index.php提供服务,但是上面的URL不应该更改(例如example.com/page/AAA0001/?id=78324#78324
如何使用.htaccess实现这一点?

zpgglvta

zpgglvta1#

现在页面正在从AAA0001/index.php加载
因此AAA0001是文件系统上的一个物理“目录”,而不仅仅是一个(虚拟的)URL路径段(那么为什么/page/AAA0001/index.php一开始就存在呢?)
DirectoryIndex指令(mod_dir的一部分)决定Apache在请求目录时尝试提供的文件。
目前,它可能被设置为类似于DirectoryIndex index.php(相对URL路径)的值,因此它尝试从请求的任何目录中提供index.php
但是,您可以将其设置为根目录相对URL路径,以便在请求目录时始终为特定文件提供服务。例如:

DirectoryIndex /page/index.php

现在,当您请求类似example.com/page/AAA0001/?id=78324#78324的URL(其中/page/AAA0001是物理目录)时,它将提供/page/index.php而不是/page/AAA0001/index.php
您也可以同时设置这两个参数,以便它将在请求的目录中提供index.php(如果存在),否则 fallback/page/index.php

DirectoryIndex index.php /page/index.php

参考编号:

  • https://httpd.apache.org/docs/2.4/mod/mod_dir.html#directoryindex

另一方面,如果这只适用于/page/ABC01234/的请求(其中目录由3个大写字母后跟4个数字组成-如您的示例所示),则可以将DirectoryIndex指令与<If>表达式结合使用。例如:

<If "%{REQUEST_URI} =~ m#^/page/[A-Z]{3}\d{4}/#">
    DirectoryIndex /page/index.php
</If>

或者,改用mod_rewrite:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^page/[A-Z]{3}\d{4}/ page/index.php [L]

前面的 conditionRewriteCond指令)可能是不必要的,但这确保了只有对物理目录的请求被重写到/page/index.php而不是可能不存在的/page/ZZZ9999/。这模仿了上面提到的DirectoryIndex的行为。

相关问题