2012-11-09 190 views
1

我已經搜索了Google整天使用.htaccess文件進行以下類型重寫的示例,但我什麼也沒有提出。我已經閱讀了「寫作」重寫規則,但我不覺得這是一個容易解決的問題。用Apache重寫規則重寫URL

反正,我怎麼會採取以下網址

whatever.com/any/number/or/level/of/directories

,並重寫這個URL

http://www.whatever.com/any/number/or/level/of/directories

非常感謝你提前。

編輯

我忘了提及關於我的工作網站兩件事情。首先,我正在使用Drupal 7設計的網站上工作。模塊重定向已啓用。

EDIT(.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)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$"> 
    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_value post_max_size     65M 
    php_value upload_max_filesize    65M 
    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 

    # 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} !^www\. [NC] 
    # RewriteRule^http://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://%1%{REQUEST_URI} [L,R=301] 

    RewriteCond %{HTTP_HOST} !^www\.website\.org$ [NC] 
    RewriteRule .? http://www.website.org%{REQUEST_URI} [R=301,L] 

    # 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> 
+0

的RewriteCond%{HTTP_HOST} ^!WWW \ .website \ .ORG $ 重寫規則? http://www.website.org% {REQUEST_URI} [R = 301,L] – dqfan2012

+0

RewriteCond%{HTTP_HOST}^www \。(。+)$ [NC] RewriteRule^http://%1%{REQUEST_URI } [L,R = 301] – dqfan2012

回答

2

類似以下應該工作到您的example.com重定向到www.example.com網站。

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

</IfModule> 

這假設您已啓用mod_rewrite模塊。

更新: 您還需要確保以下聲明位於您的http虛擬主機配置文件中。

<Directory /path/to/your/site> 
    AllowOverride All  
</Directory> 
+0

我很感謝你的快速回復。我對Apache HTTP重定向瞭解甚少。我嘗試了您與其他人分享的重定向。他們都沒有工作。我忘了提及我正在使用的環境的兩件事。首先,我正在使用Drupal 7網站。重定向模塊與Drupal 7一起安裝。我不知道這是否覆蓋了我添加到.htaccess文件中的條件和規則。再次,Drupal在.htaccess文件中有它自己的規則(這也可以覆蓋我添加的內容)。 – dqfan2012

+0

太棒了!在Drupal 7的.htaccess文件中查看,有一個部分,您只需取消註釋以使其工作。這實際上是我從我的解決方案中獲得的。您應該保持原樣,而不必鍵入實際的域名。 – aaronott

+0

我沒有編輯這些部分,重定向仍然無效。我想知道Drupal中的某些東西是否會停止重寫。 – dqfan2012