Убедитесь, что подкаталоги не прослушивают mod rewrite

#.htaccess #mod-rewrite #url-rewriting

#.htaccess #mod-перезапись #url-перезапись

Вопрос:

Я использую несколько динамических страниц для каждого файла .html в моем корне.

Со следующей строкой:

 RewriteRule ^(.*).html content.php?alias=$1 [L]
  

Это работает нормально, но у меня также есть несколько других веб-сайтов в том же месте, всего в нескольких папках. Я не хочу, чтобы они прослушивали эту строку, каждый раз, когда я создаю файл .html, я получаю перенаправление на content.php в моем корне.

Пример:

Расположение моего content.php:

 public_html/Website/content.php

public_html/Website/_intern/websites/index.html
  

Указанный выше файл перенаправляется на content.php в моем корне.

Как я могу предотвратить это?

Ответ №1:

Настройте свое регулярное выражение. Вместо .* того, что соответствует чему-либо, что вы должны использовать [^/] , чтобы соответствовать чему-либо, кроме / . Это гарантирует, что вы ничего не выбираете в подкаталогах:

 RewriteRule ^([^/] ).html$ content.php?alias=$1 [L,QSA,NC]
  

Комментарии:

1. Я думаю, что это так, но у меня есть другой mod rewrite, который перенаправляет URL-адреса с помощью _ to content.php Тот, который я тестирую, имеет символ подчеркивания, так как же мне изменить строку для работы с символами подчеркивания? Нравится это? : ^([_^/] ).html$ content.php?alias=$1 [L,QSA,NC]

2. Если я правильно понял, ваша строка не должна прослушивать какие-либо подкаталоги, но _intern — это подкаталог, который все еще прослушивает: RewriteRule ^_(.*)/(.*).html /lp.php?alias=$2 [L] даже если он идет после вашей строки.

3. Вы должны сначала опубликовать свой существующий .htaccess, о котором идет речь, чтобы я мог дать вам соответствующий совет. Также скажите мне, что такое full UR, который вы используете для тестирования, а что не работает?