Сконфигурируйте htaccess для игнорирования подпапки webroot, но для обслуживания файлов, содержащихся в этой подпапке, webroot содержит веб-приложение с псевдонимом URL - PullRequest
0 голосов
/ 09 января 2012

У меня есть веб-сайт Drupal, у которого есть страница с псевдонимом URL-адреса /news, однако клиенту также необходимо хранить файлы в физической папке /news/ для устаревших целей (файлы, связанные со старыми информационными бюллетенями и т. Д.).

Переход к site.com/news служит для 403 Запрещено, однако, поскольку физическая папка имеет приоритет над CMS, несомненно, как это определено в стандартном htaccess Drupal 6.

Можно ли настроить отдельный файл htaccess, которыйнаходится в пределах /news/, возможно, поэтому мне не нужно возиться со стандартным htaccess Drupal на случай, если обновления программного обеспечения в будущем могут привести к перезаписи изменений.Это, однако, маловероятно, поскольку это сайт Drupal 6, который настолько же зрел, насколько это когда-либо получит эта основная версия, поэтому модификация webroot htaccess также не является необоснованной.

РЕДАКТИРОВАТЬ:

Текущее содержание .htaccess

#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
  Order allow,deny
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
  # There is no end quote below, for compatibility with Apache 1.3.
  ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>

# Set the default handler.
DirectoryIndex index.php

# Override PHP settings. More in sites/default/settings.php
# but the following cannot be changed at runtime.

# PHP 4, Apache 1.
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

  # Cache all files for 2 weeks after access (A).
  ExpiresDefault A1209600

  <FilesMatch \.php$>
    # Do not allow PHP scripts to be cached unless they explicitly send cache
    # headers themselves. Otherwise all scripts would have to overwrite the
    # headers set by mod_expires if they want another caching behavior. This may
    # fail if an error occurs early in the bootstrap process, and it may cause
    # problems if a non-Drupal PHP file is installed in a subdirectory.
    ExpiresActive Off
  </FilesMatch>
</IfModule>

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

  # If your site can be accessed both with and without the 'www.' prefix, you
  # can use one of the following settings to redirect users to your preferred
  # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
  #
  # To redirect all users to access the site WITH the 'www.' prefix,
  # (http://example.com/... will be redirected to http://www.example.com/...)
  # adapt and uncomment the following:
  # RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  # RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
  #
  # To redirect all users to access the site WITHOUT the 'www.' prefix,
  # (http://www.example.com/... will be redirected to http://example.com/...)
  # uncomment and adapt the following:
  # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
  # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
  # VirtualDocumentRoot and the rewrite rules are not working properly.
  # For example if your site is at http://example.com/drupal uncomment and
  # modify the following line:
  # RewriteBase /drupal
  #
  # If your site is running in a VirtualDocumentRoot at http://example.com/,
  # uncomment the following line:
  # RewriteBase /

  # 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 ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

# $Id: .htaccess,v 1.90.2.5 2010/02/02 07:25:22 dries Exp $

Ответы [ 2 ]

1 голос
/ 10 января 2012

Я бы предположил, что ваш .htaccess выполняет стандартную проверку, которую выполняет веб-приложение: если URI не является файлом или каталогом, перенаправленным на фронт-контроллер, что-то вроде ...

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRules .* index.php

Поскольку в вашем случае /news является каталогом, второй RewriteCond не выполняется, поэтому он просто пытается получить доступ к папке и получает ошибку прав доступа. Самым простым решением, вероятно, было бы добавить исключение для этого файла. Точные требования будут зависеть от того, как будет выглядеть ваш текущий файл .htaccess, но размещение чего-то вроде приведенного выше в верхней части может сделать эту работу.

RewriteRule ^/news$ index.php [QSA,L]
0 голосов
/ 11 января 2012

В папке /news/ я создал новый файл .htaccess со следующим содержимым:

RewriteEngine on
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ../index.php?q=news [L,QSA]

РЕДАКТИРОВАТЬ:

Добавлен второй RewriteCond, которыйне требовался в моей промежуточной среде, но, по-видимому, необходим в производственной среде.

...