Исключение .htaccess для нескольких подпапок - PullRequest
0 голосов
/ 01 октября 2010

У меня проблемы с моим сценарием ..

когда я получаю доступ к http://www.domain.com/this-is-a-topic Я хочу, чтобы он перенаправлял на http://www.domain.com/index.php?t=this-is-a-topic... НО, когда он говорит "администрация", "карта сайта" или некоторые другие вещи, я хочу, чтобы это выглядело либо как другое условие перезаписи, либо просто получи http://www.domain.com/administration/

Вот мой код:

RewriteCond %{REQUEST_URI} !(administration|sitemap)/(.*)\. [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


# Dync links

RewriteRule ^([a-zA-Z0-9-]+)/lang:([0-9]+)?$    index.php?t=$1&l=$2 [L]
RewriteRule ^lang:([0-9]+)?$                    index.php?l=$1 [L]


RewriteRule ^sitemap/?$                         index.php?sitemap=sitemap [L]

RewriteRule ^error/([0-9]+)?$                   index.php?error=$1
RewriteRule ^([a-zA-Z0-9-]+)/?$             index.php?t=$1 

Проблема в том, что когда я пишу / администрация / она переходит к http://www.domain.com/index.php?t=/administration/ вместо перехода к http://www.domain.com/administration/index.php

1 Ответ

0 голосов
/ 02 октября 2010

Там есть две проблемы.Во-первых, ваше условие

RewriteCond %{REQUEST_URI} !(administration|sitemap)/(.*)\. [NC]

всегда будет истинным, потому что значение %{REQUEST_URI} всегда имеет переднюю косую черту (поэтому шаблон всегда не будет совпадать).Вы также, вероятно, не хотите искать эту точку в тех случаях, когда вы просматриваете карту сайта и папки администрирования напрямую.

Во-вторых, условия применяются только к самому следующему правилу, поэтому пока папки будутигнорируется для правила

RewriteRule ^([a-zA-Z0-9-]+)/lang:([0-9]+)?$    index.php?t=$1&l=$2 [L]

они не будут игнорироваться для

RewriteRule ^([a-zA-Z0-9-]+)/?$                 index.php?t=$1 

Есть несколько способов это исправить, но самый простой может быть просто игнорировать остальные правила вслучай, когда любое из ваших условий совпадает заранее, например:

# Don't rewrite and stop processing if any of the following is true
RewriteCond %{REQUEST_URI} ^/(administration|sitemap)/ [NC,OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Dync links
RewriteRule ^([a-zA-Z0-9-]+)/lang:([0-9]+)?$    index.php?t=$1&l=$2 [L]
RewriteRule ^lang:([0-9]+)?$                    index.php?l=$1 [L]

RewriteRule ^sitemap/?$                         index.php?sitemap=sitemap [L]

RewriteRule ^error/([0-9]+)?$                   index.php?error=$1
RewriteRule ^([a-zA-Z0-9-]+)/?$                 index.php?t=$1 
...