Перенаправление .htaccess, если файл существует - PullRequest
2 голосов
/ 10 июня 2011

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

В основном мне нужно, чтобы все посетители index.php были отправлены на страницу home.php, если splash.php не существует, или на страницу splash.php, если splash.php делает существует в каталоге, пока у меня есть это ...

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} index.php
RewriteCond %{DOCUMENT_ROOT}/splash.php -f
RewriteCond %{SCRIPT_FILENAME} !splash.php
RewriteRule ^.*$ /splash.php [L]

Это отправляет посетителей на mysite.com/splash.php, если он существует, только если в качестве моего URL-адреса специально указан mysite.com/index.php, он не работает, если просто использовать URL-адрес mysite.com.

Я понимаю первые 3 строки моего кода, но не бит! Splash.php -f (я получил это из некоторого другого кода перенаправления, который я нашел на SO).

Как мне перенаправить на home.php, если splash.php отсутствует?

ура!

Ответы [ 3 ]

3 голосов
/ 10 июня 2011

Попробуйте это правило. Это должно работать на mysite.com/index.php, mysite.com/ или mysite.com

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/splash.php -f
RewriteCond %{SCRIPT_FILENAME} !splash.php
RewriteRule ^(index\.php|/|)$ /splash.php [L]
1 голос
/ 10 июня 2011

Вам нужно будет разбить его на несколько блоков, поэтому попробуйте это (переходит к splash.php, если он существует, независимо от того, есть ли у них index.php в имени файла, а затем, если splash не существуетидет в home.php):

RewriteEngine on

RewriteCond %{DOCUMENT_ROOT}/splash.php -f
RewriteCond %{SCRIPT_FILENAME} !splash.php
RewriteRule ^.*$ /splash.php [L]

RewriteCond %{DOCUMENT_ROOT}/splash.php !-f
RewriteRule ^.*$ /home.php [L]
0 голосов
/ 10 июня 2011

приятель, я добавил быстрый .htaccess, и он отлично работает для меня. Я не уверен, что может отличаться в вашей конфигурации, хотя. Чтобы избежать путаницы, вот виртуальный хост Apache (2), который я использую:

<VirtualHost *:80>
   DocumentRoot "/usr/local/zend/apache2/htdocs/test-setup"
   ServerName test-setup
   ErrorLog /var/log/apache2/lps-version-one_test-setup_error_log
   LogLevel warn
   CustomLog /var/log/apache2/lps-version-one_test-setup_access_log combined
    <Directory "/usr/local/zend/apache2/htdocs/test-setup">
        DirectoryIndex index.php
        AllowOverride All 
        Order allow,deny
        Allow from all 
    </Directory>
</VirtualHost>

Когда у меня есть оба файла в каталоге, я перенаправлен на splash.php (хотя имя файла в URL не меняется - внутренне я перенаправлен на splash.php). Когда я переименовываю splash.php (или удаляю его), я вижу только index.php. Когда я ставлю его обратно, перенаправление работает как обычно. Когда я специально помещаю index.php в URL, и оба файла доступны, я перенаправляюсь на splash.php.

Fwiw, одна из лучших вещей, которые нужно помнить о mod_rewrite, это:

Несмотря на множество примеров и документов, mod_rewrite - это вуду. Чертовски круто вуду, но все равно вуду. - Брайан Мур bem@news.cmc.net

...