.htaccess Rewrite 未触发

.htaccess Rewrite 未触发

我不知道这是怎么回事……我使用的是 WAMP = Windows Apache MySQL PHP 打包。我有 2 个本地运行的网站,从一开始就互相复制并进行了修改。但是,一个网站/forum/会加载我的/forum/index.php,而另一个网站只会按照其他重定向规则的指示转到主 index.php。此 .htaccess 会重写我的所有 URL 以指向我的网站配置。

这里发生了一些事情,除了 .htaccess 之外,我不知道该看哪里。

    RewriteEngine on

    RewriteCond    %{REQUEST_URI}  ^[^.]+$
    RewriteRule    ^(.+[^/])$           /$1/  [R=301,L]

    #Don't break valid URL's!
    RewriteRule ^forum/(.+)$ forum/$1 [L]
    RewriteRule ^image/(.+)$ image/$1 [L]
    RewriteRule ^feed/(.+)$ feed/$1 [L]
    RewriteRule ^sitemap/(.+)$ sitemap/$1 [L]
    RewriteRule ^cron/(.+)$ cron/$1 [L]
    RewriteRule ^lib/(.+)$ lib/$1 [L] [NS]
    RewriteRule ^index.php$ index.php?%{QUERY_STRING} [L] [NS]



#But fix the ones that need fixing
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&subsec=$3&tiersec=$4&quadsec=$5&act=$6&%{QUERY_STRING} [L,NS]
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&subsec=$3&tiersec=$4&act=$5&%{QUERY_STRING} [L,NS]
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&subsec=$3&act=$4&%{QUERY_STRING} [L,NS]
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&act=$3&%{QUERY_STRING} [L,NS]
RewriteRule ^([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&act=$2&%{QUERY_STRING} [L,NS]
RewriteRule ^([^/]+?)/?$ /index.php?cmd=$1&%{QUERY_STRING} [L,NS]

答案1

您的问题可能不一定出在 .htaccess 上,而是出在虚拟主机定义上。请检查您是否已正确配置了 htaccess 目录的 AllowOverride 和选项指令(mod_rewrite 需要允许覆盖文件信息, 和选项 FollowSymLinks):

<Directory /your/path/to/forum>
  AllowOverride FileInfo
  Options FollowSymLinks
 </Directory>

答案2

同意 Torian 的回复,但我也可以稍微整理一下你的重写内容:

#But fix the ones that need fixing
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&subsec=$3&tiersec=$4&quadsec=$5&act=$6 [L,NS,QSA]
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&subsec=$3&tiersec=$4&act=$5 [L,NS,QSA]
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&subsec=$3&act=$4 [L,NS,QSA]
RewriteRule ^([^/]+?)/([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&sec=$2&act=$3 [L,NS,QSA]
RewriteRule ^([^/]+?)/([^/]+?)/?$ /index.php?cmd=$1&act=$2 [L,NS,QSA]
RewriteRule ^([^/]+?)/?$ /index.php?cmd=$1 [L,NS,QSA]

不清楚最后一个“/”后面没有的“?”的用途是什么,所以我保留了它们。但我怀疑:

^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$ 

可以替换为:

^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$

不会改变正则表达式的任何行为。

相关内容