【问题标题】:How to redirect folder/page.html to seperate page in htaccess如何将文件夹/page.html 重定向到 htaccess 中的单独页面
【发布时间】:2021-11-10 09:39:01
【问题描述】:

我有以下工作正常的 .htaccess 文件,现在我正在尝试添加另一个文件夹,但这不起作用。我该怎么做?

Options +FollowSymLinks
RewriteEngine On

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

RewriteRule ^(.*)\.html$ page.php [QSA,L]

正如您在上面的 htaccess 中看到的,它只匹配任何 *.html 并发送到 page.php

现在我想为 somefolder/somepage.html 添加另一行,它应该重定向到 post.php 但问题是第一个没有任何文件夹,第二个有文件夹但都有 .html 所以第一个条件触发.

提前致谢。

【问题讨论】:

  • <something>.html 的请求是否有可能映射到真实文件? (我怀疑它可以映射到目录?)
  • 如果 .html 实际存在,那么它会显示出来。 RewriteCond %{REQUEST_FILENAME} !-f 行检查物理文件是否存在。
  • 是的,我明白了。我的意思是...如果您实际上没有 <something>.html 形式的物理文件(因为这似乎是一个 PHP 驱动的站点,所以拥有 .html 文件也不一定是常态)然后检查请求没有映射到文件是不必要且浪费的。同样,检查<something>.html 的请求是否未映射到目录似乎也没有必要(您有带有.html 扩展名的目录吗?!)。 “符号链接”检查也是如此。
  • 文件系统检查相对“昂贵”,所以如果不需要的话;不要使用它们(当然不是在每个指令之前)。删除文件系统检查(不需要时)简化了指令并提高了性能。
  • 也许吧,但最好是确保错误弹出。

标签: html .htaccess directory


【解决方案1】:

所以你要么改变规则的顺序,要么添加条件,或者使用更具体的规则,对吧?

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?([^/]+)/.+\.html$ $1/post.php [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?[^/]+\.html$ page.php [QSA,L]

或者,如果您需要针对该特定文件夹使用更具体、更通用的方法:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?somefolder/.+\.html$ somefolder/post.php [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?[^/]+\.html$ page.php [QSA,L]

【讨论】:

  • 谢谢,这正是我想要的。 :)
  • 嗨,我正在尝试添加第三个标准,但它不起作用,你能帮忙吗?我的代码如下: Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l # WORKING - 检查它是否是一个产品,例如。 /some-folder/some-product.html RewriteRule ^/?([^/]+)/.+\.html$ product.php [QSA,L] # WORKING - 检查它是否是一个页面,例如。 /some-page.html RewriteRule ^/?[^/]+\.html$ page.php [QSA,L] # NOT WORKING - 检查它的类别,例如。 /some-folder RewriteRule ^/?[^/]+\$ category.php [QSA,L]
  • 抱歉,请在新的单独问题中提出此问题。如果它有助于保持简短,您可以参考这个问题。原因是分开的事情应该分开回答,而且这里不可能阅读cmets中的代码段落。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 2023-03-30
  • 2017-12-05
  • 1970-01-01
相关资源
最近更新 更多