2014-01-08 37 views
0

這是我第一次設置一個別名,並找到了幾個關於如何使用它的例子,但由於什麼原因,我仍然沒有百分之百地確信語法應該如何工作。今天我一直在花費大部分時間尋找一個具體的例子,但沒有運氣。我想我真的需要一些手持這個,哈哈。下面是一些我發現跨越這個職位運行讀者例子:需要幫助瞭解URL別名提供文本文件

httpd.apache.org/docs/2.2/urlmapping.html

net.tutsplus.com/tutorials/apache-aliasing-and -redirection/

serverfault.com/questions/362040/accessing-directories-outside-of-documentroot

這裏是我的情況: 首先,Web根,因爲我與工作是遠程服務器:

'/data1/home/spaceweather/htdoc' 

,我想鏈接在此位置開始數據文件的存檔:

'/data1/public' 

我有大約20,000個文本文件,將最終被通過網站,我發展公共搜索。包含所有文件的目錄結構是這樣的:

data1/ 
    /public/ 
      /cases/ 
        /grid108/ 
          <here there are folders, one for every day of the year> 
          <which contains the text files> 
        /grid112/ 
          <here there are folders, one for every day of the year> 
          <which contains the text files> 
        /grid180/ 
          <here there are folders, one for every day of the year> 
          <which contains the text files> 

爲例小路一路到一個文本文件看起來是這樣的:

'/data1/public/cases/grid108/144/txt/channel_dataout_2013_144_0000.log' 

上述路徑肯定是我的Web根目錄以外所以這就是爲什麼我認爲別名是最好的選擇。在線指南提到,爲了創建一個別名,我需要修改我的.htaccess文件。所以我繼續找到我的.htaccess文件(代碼如下所示)。在下面的代碼中你會注意到Drupal中的詞語,這是因爲我所製作的網站是由Drupal提供的。

我的.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)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig\.save)$"> 
    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 

# Set the default handler. 
DirectoryIndex index.php index.html index.htm 

# Override PHP settings that cannot be changed at runtime. See 
# sites/default/default.settings.php and drupal_environment_initialize() in 
# includes/bootstrap.inc for settings that can be changed at runtime. 

# PHP 5, Apache 1 and 2. 
<IfModule mod_php5.c> 
    php_flag magic_quotes_gpc     off 
    php_flag magic_quotes_sybase    off 
    php_flag register_globals     off 
    php_flag session.auto_start    off 
    php_value mbstring.http_input    pass 
    php_value mbstring.http_output   pass 
    php_flag mbstring.encoding_translation off 
</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 

    # Set "protossl" to "s" if we were accessed via https://. This is used later 
    # if you enable "www." stripping or enforcement, in order to ensure that 
    # you don't bounce between http and https. 
    RewriteRule^- [E=protossl] 
    RewriteCond %{HTTPS} on 
    RewriteRule^- [E=protossl:s] 

    # Make sure Authorization HTTP header is available to PHP 
    # even when running as CGI or FastCGI. 
    RewriteRule^- [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

    # Block access to "hidden" directories whose names begin with a period. This 
    # includes directories used by version control systems such as Subversion or 
    # Git to store control files. Files whose names begin with a period, as well 
    # as the control files used by CVS, are protected by the FilesMatch directive 
    # above. 
    # 
    # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is 
    # not possible to block access to entire directories from .htaccess, because 
    # <DirectoryMatch> is not allowed here. 
    # 
    # If you do not have mod_rewrite installed, you should remove these 
    # directories from your webroot or otherwise protect them from being 
    # downloaded. 
    RewriteRule "(^|/)\." - [F] 

    # 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/...) 
    # uncomment the following: 
    # RewriteCond %{HTTP_HOST} . 
    # RewriteCond %{HTTP_HOST} !^www\. [NC] 
    # RewriteRule^http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [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 the following: 
    # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    # RewriteRule^http%{ENV:protossl}://%1%{REQUEST_URI} [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/

    # Pass all requests not referring directly to files in the filesystem to 
    # index.php. Clean URLs are handled in drupal_environment_initialize(). 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !=/favicon.ico 
    RewriteRule^index.php [L] 

    # Rules to correctly serve gzip compressed CSS and JS files. 
    # Requires both mod_rewrite and mod_headers to be enabled. 
    <IfModule mod_headers.c> 
    # Serve gzip compressed CSS files if they exist and the client accepts gzip. 
    RewriteCond %{HTTP:Accept-encoding} gzip 
    RewriteCond %{REQUEST_FILENAME}\.gz -s 
    RewriteRule ^(.*)\.css $1\.css\.gz [QSA] 

    # Serve gzip compressed JS files if they exist and the client accepts gzip. 
    RewriteCond %{HTTP:Accept-encoding} gzip 
    RewriteCond %{REQUEST_FILENAME}\.gz -s 
    RewriteRule ^(.*)\.js $1\.js\.gz [QSA] 

    # Serve correct content types, and prevent mod_deflate double gzip. 
    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1] 
    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1] 

    <FilesMatch "(\.js\.gz|\.css\.gz)$"> 
     # Serve correct encoding type. 
     Header set Content-Encoding gzip 
     # Force proxies to cache gzipped & non-gzipped css/js files separately. 
     Header append Vary Accept-Encoding 
    </FilesMatch> 
    </IfModule> 
</IfModule> 

現在來這裏,我失去了一部分。這是我所假設的工作。如果我開始在上述文件中的代碼的最後一行,並把Alias /cases/data/ "/data1/public/cases/"這將重定向URL:

apollo.tbc.iit.edu/~spaceweather/cases/data/grid108/144/txt/channel_dataout_2013_144_0000.log

apollo.tbc.iit.edu/~spaceweather/data1/public/cases/grid108/144/txt/channel_dataout_2013_144_0000.log

這就是爲什麼這種方法沒有道理,以我。這段代碼如何告訴Web服務器在Web根目錄之外傳遞文件?我怎樣才能得到一個看起來像網址:

apollo.tbc.iit.edu/~spaceweather/data/cases/grid108/144/txt/channel_dataout_2013_144_0000.log

採取用戶到位於文件:

/data1/public/cases/grid108/144/txt/channel_dataout_2013_144_0000.log

當我把這個文件放到我的htdocs文件夾,並指出我的瀏覽器到apollo.tbc.iit.edu/~spaceweather/channel_dataout_2013_144_0000.log它就像預期的那樣在瀏覽器中顯示文件。

http://apollo.tbc.iit.edu/~spaceweather網站對於任何將瀏覽器指向其瀏覽器的人都可以瀏覽。因此,上面段落中的鏈接也可以正常工作,並將文件顯示給世界。

謝謝你的幫助,請溫柔。

--ZealotSveta

回答

0

我想你可能會過於複雜的東西一點點。

據我所知,你需要從你的docroot到數據文件夾的符號鏈接。

使用以下命令創建一個:

mkdir -p /data1/home/spaceweather/htdoc/cases #just in case it does not exist 
ln -s /data1/public/cases /data1/home/spaceweather/htdoc/cases/data 

這將創建一個名爲「數據」,這將指向你的/ DATA1 /公/件目錄的符號鏈接。

如果ls -l在該目錄中,你應該看到類似

data -> /data1/public/cases 

嘗試cddata目錄來驗證這個工作。


因爲你擁有它已經在你的.htaccess,但在這裏留下它爲別人反正這不應該是必要的你:

如果不通過網絡瀏覽器工作首先,您可能需要將FollowSymLinks添加到您的htaccess:Options +FollowSymLinks。這告訴Apache可以遵循象你創建的那樣的符號鏈接。

希望這會有所幫助。如果我誤解了你的情況或要求,請說出來,我會適當地編輯。

+0

嗨,謝謝你的回答。服務器管理員還建議符號鏈接。試過後,似乎我可以用它來讓它工作。我所需要做的就是在數據庫中添加另一列與符號鏈接,而不是實際目錄路徑,並將符號鏈接鏈接到實際鏈接,我將被設置。 非常感謝。 –