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/
精彩评论