我的网站上有以下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]
答案 0 :(得分:1)
如果您匹配video
或image
,则没有理由将{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如何解释它)?