.htaccess重写不触发

我无法弄清楚这里发生了什么…我正在使用WAMP = Windows Apache MySQL PHP打包。 我有两个站点在本地运行,字面上从一开始就修改彼此的副本。 然而,在一个/forum/将去加载我的/forum/ /forum/index.php和另一个它将只是去主要index.php按照其他redirect规则的指示。 这个.htaccess会重写所有我的url来指向我的网站的configuration。

这里发生了一些事情,除了.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] 

有可能您的问题不是在.htaccess上,而是在虚拟主机定义中。 检查你是否已经正确configuration了“htaccess”目录下的AllowOverride和option指令(mod_rewrite需要AllowOverride FileInfoOptions FollowSymLinks ):

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

同意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] 

目前还不清楚最后的“/”之后的“?”是什么意思,所以我把它们留下了。 但我怀疑:

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

可以replace为:

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

而不会改变正则expression式的行为。