.htaccess——复杂的条件

.htaccess——复杂的条件

整个周末我都在试图理解 .htaccess,但总是失败;我可以让服务器使用一组规则工作,但一次只能使用一条规则。

我的申请由几页组成:

  • 主页使用可选的查询字符串参数从详细信息页面中提取内容(以及详细信息页面不包含的内容);例如?s=item-name
  • 详细信息页面使用可选的查询字符串参数提取内容(与主页相同的参数;例如?s=item-name- 这将引用完全相同的内容)
  • 收藏页面
  • 相关页面

这些页面中的每一个都是文档根目录中的一个 php 文件(index.php、detail.php、collection.php、related php)。

我想要实现的目标:

  • 用户应该能够转到mydomain.com/detail/mydomain.com/detail(因此允许尾部斜杠)而不是mydomain.com/details.php
  • 如果存在,则查询字符串参数(?s=item-name)应在页面的尾部斜杠后输入(因此mydomain.com/item-name不是mydomain.com/?s=item-namemydomain.com/detail/item-name而是mydomain.com/detail.php?s=item-name。所有页面都是这种情况,因此一次在一个页面上设置规则似乎相当麻烦......

经过多次修改后,我的 .htaccess 文件现在如下所示:

<IfModule mod_rewrite.c>  
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?s=$1 [L]
</IfModule>

这样主页就可以拉取正确的内容,我相信距离允许任何页面上可以做同样的事情,但我无法完全理解。

有人可以帮忙吗?

答案1

您可以提取 URL 的第一部分,并使用它来测试它是否与您的某个 php 脚本匹配,如下所示:

RewriteCond $1.php              -f
RewriteRule ^([^/]+)/(.*)       $1.php?s=$2

答案2

有人在 Stack Overflow 上回答了这个问题:

https://stackoverflow.com/questions/16388636/htaccess-redirecting-several-pages

相关内容