快轉到主要內容

5 Tips on Creating Redirects in .htaccess

·350 字·2 分鐘
Y Cheung
作者
Y Cheung
Blogger, Programer & Traveler.
目錄

Per-directory rewrites need rewriting within <Directory> sections or .htaccess files, which introduces some complexity. However, if you only have permission to modify files, you must know how to put redirects in .htaccess files with RewriteRule.

1RewriteEngine on
2RewriteRule ^/index\.html$ /index.php [L]

A RewriteRule consists of three arguments separated by spaces.

The arguments are

  • Pattern: which incoming URLs should be affected by the rule, ex ^/index\.html$;
  • Substitution: where should the matching requests be sent, ex /index.php;
  • [flags]: options affecting the rewritten request, ex [L].

Here are 5 tips for creating redirects in .htaccess files.

1. Browser will cache 301 redirects
#

Browsers cache 301 redirects permanently unless cache directives in the HTTP response headers clearly state otherwise. The only method to erase these caches is to clear the browser cache, execute a hard reload, or disable caching entirely.

2. Handle special character in RewriteRule
#

Special characters like &and ? will be translated to their hexcode counterpart. The [NE] flag stops this from occurring.

The above example redirects /anchor/xyz to /bigpage.html#xyz. If the [NE] is not present, the # will be transformed to its hexcode equivalent, %23 , resulting in a 404 Not Found error situation. Please keep in mind that the # symbol may only be used in a substitution, not in a pattern.

1RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]

3. Handle non-alphanumeric characters in RewriteRule
#

In Apache 2.2, a B flag is introduced to escape non-alphanumeric characters before executing the transformation. And you should use non-alphanumeric characters directly in patterns rather than after url encode, ex using coleen's-story instead of coleen%27s-story .

4. Handle multiple lines RewriteRule in one .htaccess
#

The most specific should be at the top, and the least specific should be at the bottom. Also, make sure you’re stopping processing with [L] after each redirect rule to prevent Apache from processing subsequent rewrite rules once it finds a match.

5. Handle space in RewriteRule
#

Using a \ before the space to escape it instead of %20 , ex:

1RewriteRule ^county/phone\ number$ /front-door [R=301,L]

Testing your htaccess rewrite rules
#

Online testing tools recommends:

相關文章

修復a2ensite 報錯 Site does not exist

·208 字·1 分鐘
給ubuntu主機配置一個子域名的時候,發現用 a2ensite 居然報錯了!明明看了好些教程,比如這個,這個,都是講的差不多的東西,我都完全照著做,怎麼我一運行這個命令就報錯ERROR呢 = 3 = 網上找了一下沒什麼特別有用的,於是還是去看相關文件,終於解決了。原來是新版本的配置文件都必須採用 *.conf命名方式,也就是說要a2ensite filename.conf因為 /etc/apache2/apache2.conf 文件中的以下代碼片段: