整个周末我都在试图理解 .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-name
;mydomain.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