Apache .htaccess-重定向多个页面
周末的大部分时间里,我都在绞尽脑汁,但我总是磕磕绊绊;我可以让服务器使用一组规则,但一次只能使用一组 我的申请由几页组成:Apache .htaccess-重定向多个页面,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,周末的大部分时间里,我都在绞尽脑汁,但我总是磕磕绊绊;我可以让服务器使用一组规则,但一次只能使用一组 我的申请由几页组成: 主页通过可选的查询字符串参数从详细信息页面(以及详细信息页面不包括的内容)中提取内容;e、 g.?s=项目名称 “详细信息”页面使用可选的查询字符串参数(与主页参数相同;例如,?s=项目名称——这将引用完全相同的内容)拉入内容 收藏页 相关页 每个页面都是文档根目录中的一个php文件(index.php、detail.php、collection.php、related
- 主页通过可选的查询字符串参数从详细信息页面(以及详细信息页面不包括的内容)中提取内容;e、 g.
?s=项目名称
- “详细信息”页面使用可选的查询字符串参数(与主页参数相同;例如,
——这将引用完全相同的内容)拉入内容?s=项目名称
- 收藏页
- 相关页
- 用户应该能够转到
或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
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?s=$1 [L]
</IfModule>
重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}!-f
重写cond%{REQUEST_FILENAME}!-d
重写规则^(.*)$index.php?s=$1[L]
这使得主页可以插入正确的内容,我相信这离允许任何页面也这样做不远,但我不能完全理解它
有人能帮忙吗
RewriteEngine On
RewriteBase /
# Specifics
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.+)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ %1.php?s=%2 [L]
# EDIT 1: This will also check for root pages. See notes below
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/ $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.+) $1.php [L,QSA]
# Everything else
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?s=$1 [L]
说明:
请求文件名是否不存在
/
(带有可选的尾部斜杠)foo/bar
,它将检查/foo.PHP
是否存在detail/item name
时,服务器实际上会查看detail.php?s=item name
,为您提供响应
注意:如果它不存在,请求只需将请求发送到index.php
编辑:添加了对根页面的检测。但是,请注意,我无法让它为这种检测留下斜杠,因为它会自动将.php
修改为空的s
查询参数。不确定为什么。。。
这就是为什么当它达到这个阶段时,它会删除任何后面的斜杠。这对SEO评级/排名也有好处,因为它被视为一个页面,而不是两个重复的页面。我认为非常接近,但目前请求detail.php(
mydomain.com/detail
)正在被解释为index.php/?s=detail.miss,抱歉。请稍等片刻。非常接近…但这会削弱对js和css文件的调用…-\u-这可能与我在页面标题中引用它们的方式有关…href=“/\u includes/css/main.css”
?我明白了-只是在我这边测试了一下,你是对的-它确实把事情搞砸了。我会很快解决的。