2012-11-09 147 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