有一些问题与htaccess mod重写

时间:2016-12-30 20:10:39

标签: php apache .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 /它显示变量havent设置为因为它们不再出现在浏览器的标题选项卡中,并且该页面也不使用我的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]

这里只是加入我在php.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]

4 个答案:

答案 0 :(得分:0)

如果您的网址以2017开头,则必须将其包含在您的RewriteRule中。

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

答案 1 :(得分:0)

您误导了^,它与路径的最开头(sitename/之后的部分相匹配。)也就是说,以^slot/开头的规则仅匹配{ {1}},而非sitename/slot/。您的规则应如下所示:

sitename/2017/slot/

答案 2 :(得分:0)

我可以参加聚会吗?

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's几乎相同,但并不完全相同:)。

答案 3 :(得分:0)

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

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

Options -MultiViews

启用MultiViews(mod_negotiation的一部分)/2017/slot被隐式重写为/2017/slot.php(没有任何查询字符串参数)之前正在处理你的mod_rewrite指令。

虽然目前还不清楚.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]