Php htaccess mod rewrite存在一些问题

Php htaccess mod rewrite存在一些问题,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,大家好,我想知道我能不能帮你们想一想,我会尽可能地描述一下 因此,我试图创建一个页面,根据用户选择的内容加载标题和类别(从数据库动态加载) 网站名用作我的域名 为了更清楚一点,我有一个名为sitename/2017/slot.php?gp=category&sn=title的文件和变量 类别和标题存储在数据库中的每一行中,我想做的是创建一个干净的URL,看起来像这个sitename/2017/slot/category/title/ 因此,当查看类似以下sitename/2017/slot.ph

大家好,我想知道我能不能帮你们想一想,我会尽可能地描述一下

因此,我试图创建一个页面,根据用户选择的内容加载标题和类别(从数据库动态加载)

网站名用作我的域名

为了更清楚一点,我有一个名为sitename/2017/slot.php?gp=category&sn=title的文件和变量

类别和标题存储在数据库中的每一行中,我想做的是创建一个干净的URL,看起来像这个sitename/2017/slot/category/title/

因此,当查看类似以下sitename/2017/slot.php?gp=category&sn=title的页面时,页面将加载所有内容并正确显示,并且设置变量,正如我在浏览器选项卡的标题中看到的那样

当我使用mod rewrite使其干净时,会出现我的错误。一旦.htaccess被更改并上传,并且我导航到新的干净URL sitename/2017/slot/category/title/它显示变量没有被设置,因为它们不再出现在浏览器的标题选项卡中,而且页面也没有使用我的css。下面我添加了我的htaccess规则,非常感谢您的帮助和反馈

#change this sitename/2017/slot.php?gp=category&sn=title
#to this sitename/2017/slot/category/title/
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^slot/([a-z-]+)/([a-z-]+)/ slot.php?gp=$1&sn=$2 [NC,L]
以防万一,这是我在slot.php中使用的php代码,我正在连接到我的数据库,没有问题,在下面的代码之后,我运行一个while循环,以获取用户单击的行的数据

if($_GET['gp'] && $_GET['sn']){
    $gp = preg_replace('#[^a-zA-Z-]#i', '', $_GET['gp']);
    $sn = preg_replace('#[^a-zA-Z-]#i', '', $_GET['sn']);
}
这是我的htaccess中的完整代码

#make custom page not found
#ErrorDocument 404 /filenotfound.php

#stop directory file listing in all folders
IndexIgnore *

#make pages have www. in them
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.org
RewriteRule ^(.*)$ http://www.example.org/$1 [R=permanent,L]

#change this slot.php?gp=category&sn=title
#to this sitename/2017/slot/category/title/
Options -MultiViews +FollowSymLinks
RewriteRule ^slot/([a-z-]+)/([a-z-]+)/ /2017/slot.php?gp=$1&sn=$2 [R=302]

如果您的URL以
2017
开头,则必须将其包含在重写规则中

RewriteRule ^2017/slot/([a-z-]+)/([a-z-]+)/ slot.php?gp=$1&sn=$2 [NC,L]

您误用了
^
,它匹配路径的最开始部分(在
sitename/
之后的部分)。也就是说,以
^slot/
开头的规则将只匹配
sitename/slot/
,而不是
sitename/2017/slot/
。您的规则如下所示:

#change this sitename/2017/slot.php?gp=category&sn=title
#to this sitename/2017/slot/category/title/
RewriteRule ^2017/slot/([a-z-]+)/([a-z-]+)/ slot.php?gp=$1&sn=$2 [NC,L]
我可以参加聚会吗

RewriteRule ^sitename/2017/slot/([a-z-]+)/([a-z-]+)/ /slot.php?gp=$1&sn=$2 [NC,L]
如果
sitename
是域名,我会将答案更改为:

RewriteRule ^2017/slot/([a-z-]+)/([a-z-]+)/ /slot.php?gp=$1&sn=$2 [NC,L]
这与Dekel的几乎相同,但不完全相同:)

您需要禁用多视图。在
.htaccess
文件顶部附近:

Options -MultiViews
启用多视图(mod_协商的一部分)
/2017/slot
将在处理mod_重写指令之前隐式重写为
/2017/slot.php
(不带任何查询字符串参数)


尽管仍然不清楚
.htaccess
文件的位置。所以,可能还有一些工作要做。。。如果您的
.htaccess
文件位于
example.com/2017/.htaccess
,那么您现有的mod_重写指令就足够了

但是,如果
.htaccess
文件位于文档根目录中(即
example.com/.htaccess
),则需要修改
重写规则

RewriteRule ^2017/slot/([a-z-]+)/([a-z-]+)/ 2017/slot.php?gp=$1&sn=$2 [NC,L]


好的,我尝试了你的建议,但我仍然有同样的问题,使用mod rewrite后没有收到任何变量,如果我将其返回到原始url,则会找到并使用get变量,并且页面没有使用为该页面设置的css。您是否尝试直接指向sitename/2017/slot.php或sitename/slot.php?如果是前者,您需要在规则的两个部分中使用2017:
重写规则^2017/slot/([a-z-]+)/([a-z-]+)/2017/slot.php?gp=$1&sn=$2[NC,L]
我刚刚更改了htaccess以匹配您的新建议,您仍然无法解释什么是“相同的结果”?相同的结果是,我的php页面中没有设置变量,也没有使用css,就好像你删除了mod rewrite并使用了原始插槽一样。php?gp=category&sn=title一切正常设置变量,css工作css是因为你(可能)使用了相对路径(而不是绝对路径)因此,浏览器正在查找
sitename/2017/slot/category/title/style.css中的
style.css
文件(而不是
sitename/style.css
)。关于PHP中的变量-我不明白你得到了什么。好的,我理解css的原因。关于PHP变量,看一看原始帖子,我已经用slot.PHP页面中的PHP代码对其进行了更新,尝试添加
var\u dump($\u GET)
之前,如果
你到了那里。@Dusan Bajic欢迎参加聚会:)我会试试你放的东西,如果失败或失败,我会在2分钟内告诉你not@Dekel那是哪一个,,我找不到完全相同的吗?@Dusan Bajic仍然不工作,希望每个人都能看到这一点,即sitename是我的域名,我只是不允许发布两次以上的域名,所以将其保留为sitenamesimplicity@DusanBajic对不起,你把
sitename
放在那里不是很好吗(这是错误的,顺便说一句。域不应该是
重写规则的一部分。
。哦,这就是域名?我以为它只是URI路径:)例如,域请使用
example.com
sitename
,在这个上下文中是不明确的,因为它可能被视为一个子目录。(因此下面有些混淆。)@w3dk我是一个新成员,它不允许我发布任何类型的域名,这是我写问题时它告诉我的,因此不得不求助于SiteName编辑器不允许您发布多个外部链接。要发布示例URL,请将其环绕在背景标记中(内联代码格式)-如果以这种方式格式化,则没有限制。@w3dk好的,谢谢您。请注意,对于将来的参考,此
.htaccess
文件位于哪里?您的代码暗示它位于
/2017
子目录中(这是物理目录吗)?但是,到目前为止,答案是假设它在文档根目录中?因此,您现有的mod_rewrite指令应该可以。您只需要禁用
多视图
,如上所述。请确保清除浏览器缓存等。运气好吗?是的,禁用了多视图,清除了我的缓存,仍然没有结果这是Apache,但您的站点正在从Nginx服务器…您是否将Nginx用作前端代理?sou
RewriteRule ^2017/slot/([a-z-]+)/([a-z-]+)/ 2017/slot.php?gp=$1&sn=$2 [NC,L]