2009-09-07 3 views
0

Я новичок в mod_rewrite и только что прошел пробную версию и ошибку, я бы перенаправил все URL-запросы в /drupal-6.13/ и скрыть /drupal-6.13 /, но если URL-адрес www.site.com/wiki не переписывает что-либо. Я также использую pathauto mod в drupal для создания/контентов/заголовков ссылок для контента истории. Я думаю, что это последний раздел в верхнем и нижнем htaccess, который переписывает URL-адрес, потому что www.iamthelaw.net/wiki переписывается как http://www.iamthelaw.net/wiki/?q=wiki, но если я попытаюсь удалить их, то ссылки администратора и ссылки на контент больше не будут работать. Есть ли что-нибудь, что я могу добавить, не снимая того, что в настоящее время существует, чтобы переопределить только для/wiki/запросов?mod_rewrite redirect all urls except/wiki

вот htacess на верхнем уровне:

Options -Indexes 
RewriteEngine on 
Options +FollowSymLinks 

#site 
RewriteCond %{HTTP_HOST} ^www\.iamthelaw\.net$ [NC] 
RewriteCond %{REQUEST_URI} !^/drupal-6.13 
RewriteRule ^$ /drupal-6.13/index.php [L] 


#files 
RewriteCond %{HTTP_HOST} ^www\.iamthelaw\.net$ [NC] 
RewriteCond %{REQUEST_URI} ^.*\.(jpg|jpeg|gif|png|css|js|pl|txt)$ 
RewriteCond %{REQUEST_URI} !^/drupal-6.13/ 
RewriteRule ^(.*)$ /drupal-6.13/$1 [L,QSA] 

#url 's 
RewriteCond %{HTTP_HOST} ^www\.iamthelaw\.net$ [NC] 
RewriteCond %{REQUEST_URI} !^/drupal-6.13 
RewriteRule ^(.*)$ /drupal-6.13/index.php?q=$1 [L,QSA] 

и в секции перезаписи htacess в подкаталоге /drupal-6.13/:

# Various rewrite rules. 
<IfModule mod_rewrite.c> 
RewriteEngine on 

RewriteBase /drupal-6.13 


# Rewrite URLs of the form 'x' to the form 'index.php?q=x'. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteRule ^(.*)$ /drupal-6.13/index.php?q=$1 [L,QSA] 
</IfModule> 

ответ

0

Помещенные правила перезаписи для/вик ранее в файле и убедиться, что он имеет L как часть модификаторов (скорее всего, это будет [L,QSA]), так что это правило L обрабатывается для сопоставления URL-адресов, поэтому последующие перезаписи не повлияют на него.

+0

Спасибо за помощь, я попытался добавить: #wiki RewriteCond% {HTTP_HOST}^WWW \ .iamthelaw \ .net \ вики $ [NC] RewriteCond% {REQUEST_URI} ^/вики RewriteRule^(!. *) $/wiki [L, QSA] в верхней части первого htaccess и над линией RewriteBase во втором htaccess, но я все еще получаю www.iamthelaw.net/wiki, перенаправленный на http: //www.iamthelaw. сеть/вики /? д = вики – 2009-09-07 23:14:50

0

Как я думаю, Дав говорил, что вы делаете правило для /wiki сначала, с [L], поэтому дальнейшие правила игнорируются для /wiki. следует вашему правило для другого Suff

RewriteRule ^wiki /wiki [L] 
RewriteRule ^.* /notwiki 

Я надеюсь, что вы можете адаптировать это к вашей ситуации

0

Я думаю, вам просто нужны два правило:

RewriteCond %{THE_REQUEST} ^GET\ /drupal-6\.13 
RewriteRule ^drupal-6\.13($|/.*) 
RewriteRule !^wiki($|/) drupal-6.13/index.php [L] 

Эти удалить /drupal-6.13 из любого запроса, это URL-путь начинается с /drupal-6.13/ и переписывает любой запрос, это путь URL-адреса не начинается с /wiki/, внутренне до /drupal-6.13/index.php.

0

Я пробовал это локально и, похоже, работает. Это для вашего файла .htaccess корня:


RewriteEngine on 

# Leave the wiki calls alone 
RewriteCond %{REQUEST_URI} ^wiki.*$ 
RewriteRule ^.*$ - [L] 

# redirect everything else to the drupal directory. 
# the drupal .htaccess takes care of drupal-specific rewrites 
RewriteRule ^(.*)$ drupal-6.13/$1 [L] 

И .. Я не думаю, что вам нужно RewriteBase в вашем Друпал файле .htaccess либо, так как все URLs уже перенаправляется в эту папку.