开发者

Basic help with mod_rewrite conditions

Hi. I am new to mod_rewrite and was wondering if it was possible to do the following:

RewriteRule ^([^/]*)$ index.php?slug=$1

This rule will point only at index.php but if I wanted to do another rule that pointed a specific slug to a different script, i.e.

RewriteRule ^a-new-page$ different.php

This would not work because the first rule has decla开发者_运维问答red anything that is entered should point at index.

Is there a way to force the new rule for that specific slug?


Yes, it is possible -- just place such specific rule before generic/broad one (the order in which rules are declared matters):

RewriteRule ^a-new-page$ different.php
RewriteRule ^([^/]*)$ index.php?slug=$1

Also please pay attention to the broad rules -- they may enter into a rewrite loop (after rewrite new URL goes into next iteration, and if rule is not written right it may enter endless loop which Apache will have to forcedly terminate and your user will see an 500 error page instead). Better rule will be:

# specific rule
RewriteRule ^a-new-page$ different.php [L,QSA]

# broad rule (will be triggered if requested resource is not a file or directory) 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ index.php?slug=$1 [L,QSA]
  • [L] tells Apache to stop rewriting if this rule matches
  • [QSA] tells to append query string to a new URL (useful if you have URL parameters: e.g. tracking data, page parameters etc).

Useful Link: http://httpd.apache.org/docs/current/rewrite/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜