繁体   English   中英

htaccess mod重写存在一些问题

[英]Having some issues with htaccess mod rewrite

大家好,我想知道我是否可以动动脑筋,并尽可能地描述自己。

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

网站名称用作我的域名

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

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

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

当我使用mod重写使其干净时,出现错误,一旦.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中。

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的相同,但不完全相同:)

 #example.com/2017/slot.php?gp=category&sn=title #example.com/2017/slot/category/title/ 

您需要禁用MutliViews。 .htaccess文件顶部附近:

Options -MultiViews

在启用MultiViews(mod_negotiation的一部分)的情况下, /2017/slot将在处理mod_rewrite指令之前隐式重写为/2017/slot.php (不包含任何查询字符串参数)。


尽管仍然不清楚您的.htaccess文件位于何处。 因此,可能仍有一些工作要做...如果您的.htaccess文件位于example.com/2017/.htaccess则您现有的mod_rewrite指令应该就足够了。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM