如何修改.htaccess文件以提供QUERY_STRING?

时间:2017-08-21 06:09:21

标签: php .htaccess mod-rewrite

我的网站上有以下htaccess文件,它在过去两年里运行良好。最近我将服务器迁移到新的托管合作伙伴,似乎没有按预期工作。我已确认服务器支持mod_rewrite模块。我可以看到[QUERY_STRING] =>是指定我指定的URL,并且所有URL都路由到主页。任何人都可以告诉我需要修改什么。我在stackoverflow中看到了很多答案,对我来说没什么用。我只是这个htaccess文件中的一个初学者。

Options +FollowSymLinks
RewriteEngine On
Options -Indexes

# REWRITING index.php AS index #
RewriteRule   ^index/?$   index.php  [NC]

# Route The Pages #
RewriteRule   ^index/([{a-z}]+)/?$   index.php?$1  [NC,L]

RewriteRule   ^index/home/([0-9]+)/?$   index.php?home&p_id=$1  [NC,L]
RewriteRule   ^index/page/([{a-z}{\-\}{0-9}]+)/?$   index.php?page&show=$1  [NC,L]

RewriteRule   ^index/gallery/([{image}{video}]+)/?$   index.php?gallery&type=$1  [NC,L]
RewriteRule   ^index/gallery/([{image}{video}]+)/([0-9]+)/?$   index.php?gallery&type=$1&album=$2  [NC,L]

2 个答案:

答案 0 :(得分:1)

如果您匹配videoimage,则没有理由将{video}设为{和} will match literally {video}`。

以这种方式拥有.htaccess:

Options +FollowSymLinks -Indexes -MultiViews
RewriteEngine On

# REWRITING index.php AS index #
RewriteRule ^index/?$ index.php [NC,L]

# Route The Pages #
RewriteRule ^index/([a-z]+)/?$ index.php?$1 [NC,L,QSA]

RewriteRule ^index/home/([0-9]+)/?$ index.php?home&p_id=$1 [NC,L,QSA]

RewriteRule ^index/page/([a-z0-9-]+)/?$ index.php?page&show=$1 [NC,L,QSA]

RewriteRule ^index/gallery/(image|video)/?$ index.php?gallery&type=$1 [NC,L,QSA]

RewriteRule ^index/gallery/(image|video)/([0-9]+)/?$ index.php?gallery&type=$1&album=$2 [NC,L,QSA]

答案 1 :(得分:1)

Options +FollowSymLinks
RewriteEngine On
Options -Indexes

空查询字符串与启用MultiViews一致(可能是服务器更新的结果)。尝试停用MultiViews文件顶部的.htaccess

Options +FollowSymLinks -Indexes -MultiViews
RewriteEngine On

如果MultiViews已启用,则/index/<something>的请求将导致/index.php/<something>的内部子请求,并且您的其余指令都不会匹配。

但是,你仍然需要将你的正则表达式更新为类似anubhava建议的东西,因为你当前的正则表达式可能比你想要的更多。但是你目前的模式是模棱两可的。例如,[{a-z}{\-\}{0-9}]+应该匹配什么?看起来你或许打算成为<letter>-<digit>?但是,它目前匹配字母,数字和连字符的任何组合(这是anubhava如何解释它)?