当前位置: 首页 > 知识库问答 >
问题:

动态文件名和重写路径的重写

苏宜人
2023-03-14

我试图做一个重写,如果页面不存在,它重写到一个类别页面。它与普通的ReWriteCond%{REQUEST_FILENAME}-f有点不同,因为页面名称是基于URL动态的。

如果有人访问动态路径名称,如“/联系人”

我首先希望它检查以下文件夹/文件是否存在基于路径名称:

/[dynamicpath]/[dynamicpath].php

例如:

/contacts/contacts.php

如果不存在,重写到以下页面

/categories/category/category.php?cat_url=[dynamicpath]

例如:

/categories/category/category.php?cat_url=contacts

我已经尝试了下面的方法,但是当文件存在并直接进入类别重写时,第一个重写规则触发失败。

RewriteCond %{SCRIPT_URL} ^(.+)
RewriteCond %{DOCUMENT_ROOT}/%1/%1.php !-f
RewriteRule (.+)/?$      $1/$1.php  [QSA,L]

RewriteRule ^([\w-]+)/?$                /categories/category/category.php?cat_url=$1        [QSA,L]

共有2个答案

辛可人
2023-03-14

我通过检查正在传递的服务器变量找到了答案,并发现%{REQUEST_FILENAME}包含完整的文件路径(document_root FILENAME)。

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}%{REQUEST_URI}.php -f
RewriteRule ^(.+)/?$ $1/$1.php [L]

RewriteRule ^(.+)/?$ categories/category/category.php?cat_url=%{REQUEST_URI} [QSA,L]
漆雕宏浚
2023-03-14

您可以在您的站点root. htaccess中使用这些规则:

RewriteEngine On

# attempt rewrite to /[dynamicpath]/[dynamicpath].php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1/$1.php -f
RewriteRule ^(.+?)/?$ $1/$1.php [L]

# else rewrite to categories/category/category.php?cat_url=...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ categories/category/category.php?cat_url=$1 [QSA,L]
 类似资料:
  • 给定一组非负整数和一个值和,确定给定集合中是否有和等于给定和的子集。 例如: 我实际上用这段代码解决了问题: 然而,现在我想重建所有可能的组合,形成给定的总和。 是可以从我的回忆录矩阵中做到这一点,还是我必须以不同的方式做到这一点?

  • 问题内容: 我正在尝试在Django中生成动态文件路径。我想制作一个像这样的文件系统: 我发现了一个相关的问题:具有动态路径的Django自定义图像上传字段 在这里,他们说我们可以更改upload_to路径,并指向https://docs.djangoproject.com/en/stable/topics/files/ doc。在文档中,有一个示例: 但是,这仍然不是动态的,我想给Car id赋

  • 问题内容: 以下是我的Windows目录的路径。通常,路径应使用\而不是//,但两者似乎都可以正常工作。 与Linux路径相同。法线应该用/代替//。上面和下面的代码片段都可以正常工作,并将抓取指定文件的内容。 因此,它们都使用奇怪的文件路径声明,但似乎都可以正常工作。请详细说明。 例如, 问题答案: 通常,在Windows上指定文件路径时,应使用反斜杠。但是,在Java和Windows世界之外的

  • 问题内容: 是否可以使用node.js重写URL路径?(我也在使用Express 3.0) 我已经尝试过这样的事情: 但是网址继续不变 问题答案: 当然,只需添加一个中间件功能即可对其进行修改。例如: 此功能从所有传入的请求URL中删除尾部斜杠。请注意,为了使其正常工作,您需要将其放在调用之前。

  • 问题内容: 在将我的PHP配置完全搞乱之后,尝试使SOAP模块正常工作(-bash:/ usr / bin / php:没有这样的文件或目录…。)我现在必须使用MAMP,但是每次必须键入路径 如何只键入php而不是MAC上的整个路径? 我仔细检查过,但没有一个名为nor 的文件 谢谢 PS:这是输出echo $ PATH的内容: 问题答案: 每次保存MAMP config(PHP部分)时,它将在文

  • 是否有可能静态解析被覆盖的方法? 调用虚拟绑定和动态绑定之间是什么关系?所有调用的虚拟方法都是动态绑定的吗? 这里x.display显示调用虚拟?这是什么意思?这意味着它是动态绑定的吗?