Назад | Перейти на главную страницу

.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]

Согласен с ответом Ториана, но я также могу немного поправить ваши переписывания:

#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]

Непонятно, какова цель знаков «?», Которые не идут после последнего «/», поэтому я оставил их. Но подозреваю, что:

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

можно заменить на:

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

ничего не меняя о поведении регулярного выражения.

Вполне возможно, что ваша проблема не обязательно в .htaccess, а в определении виртуального хоста. Убедитесь, что вы правильно настроили директивы AllowOverride и option для каталога htaccess (для mod_rewrite требуется AllowOverride FileInfo, и Параметры FollowSymLinks):

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