【问题标题】:3rd rule in .htaccess to redirect to specific file.htaccess 中的第三条规则重定向到特定文件
【发布时间】:2021-10-13 16:58:46
【问题描述】:

我的代码如下,前两条规则运行良好,但我无法使用第三条(检查其类别,例如 /some-folder)页面是否应由 category.php 文件提供。有人可以帮忙吗?

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

# WORKING - Check if its a product eg. /some-folder/some-product.html
RewriteRule ^/?([^/]+)/.+\.html$ product.php [QSA,L]

# WORKING - Check if its a page eg. /some-page.html
RewriteRule ^/?[^/]+\.html$ page.php [QSA,L]

# NOT WORKING - Check if its category eg. /some-folder
RewriteRule ^/?[^/]+\$ category.php [QSA,L]

【问题讨论】:

  • 有趣的是,您接受了大约一个月前提出的问题中建议的重写规则,但未能在 每个 规则之前添加这些条件。为什么? stackoverflow.com/questions/69190732/… 请理解,这些条件仅适用于它们之前的单一规则,而不适用于任何其他规则。您应该查看文档以了解此类详细信息。
  • 尝试在最后一条规则中使用^/?[^/]+/?$ 作为匹配模式。问题很可能是在尝试的规则中转义了$
  • 澄清一下,“类别”/some-folder 映射到文件系统上的物理目录吗?提出此请求时实际发生了什么? “不工作”到底是什么意思。

标签: apache .htaccess mod-rewrite


【解决方案1】:

对于您显示的示例,请尝试遵循编辑后的 ​​htacess 规则。

请确保在测试您的 URL 之前清除您的浏览器缓存。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# WORKING - Check if its a product eg. /some-folder/some-product.html
RewriteRule ^([^/]*/)/([^.]*\.html)/?$ product.php [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# WORKING - Check if its a page eg. /some-page.html
RewriteRule ^([^.]*)\.html/?$ page.php [QSA,NC,L]

# EDITED RULES here.. - Check if its category eg. /some-folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?[^/]+/?$ category.php [QSA,L]

【讨论】:

  • 能否请您详细说明为什么您认为减少第三条规则中的匹配模式应该在这里有所作为?
  • 请再次删除那些NC 标志,它们在这方面并没有多大意义。
  • @arkascha,根据用户显示的网址,这是写的,如果有任何遗漏,请随时告诉。
  • 我不知道你想对as per user shown urls this is written说什么,对不起。
  • 我会建议我在问题的评论中发布的模式,问题很可能是尝试规则中的 $ 转义。所以这应该是固定的。正如您所建议的,删除匹配结构的问题是该规则可能与其他规则发生冲突。因为它比原始模式匹配更多
猜你喜欢
  • 2016-09-06
  • 2011-03-01
  • 2010-12-19
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多