2012-07-04 2 views
0

Как бы переписать URL, такие как:мод-переписывают раздеть подкаталог в .htaccess

http://www.site.com/sub-directory/page-name 

в

http://www.site.com/page-name 

?

+0

ответ зависит от того, хотите ли вы ** каждый «sub-dir» ** должен быть удален или только когда файл существует –

+0

Да, я бы хотел, чтобы каждая первая вспомогательная директория была удалена. Например, если текущий путь - http://www.site.com/sub-directory/sub-sub-directory/page-name, мне бы хотелось http://www.site.com/sub-sub-directory/page -name – Fraser

+0

является 'подкаталогом 'статическим каталогом? Если нет, как бы вы справлялись с именованием конфликтов? –

ответ

1

Я считаю, что ваше предполагаемое решение использует Virtual Hosts, но если у вас нет доступа к httpd.conf, вы можете попробовать следующие правила перезаписи:

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} =host1.example.com 
RewriteCond %{REQUEST_URI} !^/host1-dir 
RewriteRule ^(.*) host1-dir/$1 [L] 

RewriteCond %{HTTP_HOST} =host2.example.com 
RewriteCond %{REQUEST_URI} !^/host2-dir 
RewriteRule ^(.*) host2-dir/$1 [L] 

RewriteCond %{HTTP_HOST} =host3.example.com 
RewriteCond %{REQUEST_URI} !^/host3-dir 
RewriteRule ^(.*) host3-dir/$1 [L] 

# If doesn't match any of it then 404 Not Found or anything you like 
RewriteCond %{HTTP_HOST} =host1.example.com 
RewriteCond %{HTTP_HOST} =host2.example.com 
RewriteCond %{HTTP_HOST} =host3.example.com 
RewriteRule .* - [R=404,L] 
0

IIRC mod_rewrite поддерживает регулярное выражение, так что вы можете использовать его заменить:

^(.*/)[^/]*& 

В круглых скобках соответствуют всем до последних /.

Тогда вы повторно используете его, используя групповую ссылку, я думаю, что это $1. Остальное отбрасывается.

Проверить mod_rewrite помощь по использованию регулярного выражения.

Смежные вопросы