我不知道这是怎么回事……我使用的是 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]
不清楚最后一个“/”后面没有的“?”的用途是什么,所以我保留了它们。但我怀疑:
^([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/([^/]+?)/?$
可以替换为:
^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$
不会改变正则表达式的任何行为。