.htaccess перенаправить "domain.tld /" на "domain.tld / home.html" - PullRequest
1 голос
/ 09 июля 2010

У меня есть сайт на моем локальном хосте:

http://localhost/mysite/www/index.php

У меня есть несколько RewriteRules для перенаправления следующим образом:

http://localhost/mysite/www/index.php?page=home
->  http://localhost/mysite/www/home.html

А теперь я хочу сделать перенаправление следующим образом:

http://localhost/mysite/www/
->  http://localhost/mysite/www/home.html

У меня есть переменная окружения с именем REWRITE_BASE, содержащая /mysite/www/. Поэтому я подумал сравнить {REQUEST_URI} с %{ENV:REWRITE_BASE} ... вот так:

RewriteCond {REQUEST_URI} =%{ENV:REWRITE_BASE}

RewriteRule . %{ENV:REWRITE_BASE}home\.html [R=301,L]

Но это не очень хорошо работает.

Чтобы помочь вам понять, что я хочу сделать, вот рабочий код на PHP, который делает то, что я хочу:

$rewriteBase = getenv('REWRITE_BASE');

if ($rewriteBase === $_SERVER['REQUEST_URI'])
    header('Location: '.$rewriteBase.'home.html');

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 11 июля 2010

Хорошо ... так как я не могу использовать переменную для сравнения, вот как я это сделал:

# Redirect domain.tld/ to domain.tld/home.html
RewriteCond %{REQUEST_URI} =/www/ [OR]
RewriteCond %{REQUEST_URI} =/mysite/www/
RewriteRule ^(.*)$ %{REQUEST_URI}home\.html [R=301,L]

# RewriteBase equivalent - Production environment
RewriteRule . - [E=REWRITE_BASE:/www/]

# RewriteBase equivalent - Development environment
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule . - [E=REWRITE_BASE:/mysite/www/,E=DEVELOPMENT_ENV:1]

# Website rewritings
RewriteRule ^([^/]*)(?:/([^/]*))?\.html$ %{ENV:REWRITE_BASE}index\.php?page=$1&view=$2 [QSA,L]

Теперь все в порядке. Спасибо за ваши ответы! ;)

0 голосов
/ 09 июля 2010

То, что вы хотите сделать, не будет работать, потому что mod_rewrite не раскрывает никаких переменных, присутствующих в его тестовых шаблонах. Поэтому, когда вы делаете что-то подобное ...

RewriteCond %{REQUEST_URI} =%{ENV:REWRITE_BASE}

... На самом деле вы сравниваете значение %{REQUEST_URI} со строкой "%{ENV:REWRITE_BASE}" вместо значения "/mysite/www/", как вы хотели. Есть ли причина, по которой вы не можете указать значение непосредственно в RewriteCond или просто переместить правила так, чтобы они начинались с каталога /mysite/www/?

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

...