Adding rewrite rules directly to .htaccess file

I wanna add a simple rewrite rule

RewriteRule ^apply\/? https://docs.google.com/forms/d/e/1FAIpQLSf5IrOhg0E_NAGZnOvMuaXhU80sio8bukaWVBkb87eEOa9kTw/viewform [L]

my .htaccess file is like

# BEGIN WordPress
# The directives (lines) between BEGIN WordPress and END WordPress are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
IfModule mod_rewrite.c
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
/IfModule

# END WordPress

If I add my rule to the last line of this file, it won't work. But if I add it into right after

RewriteEngine On

it will work. But it will get overwritten.

I don't understand why this line won't work outside of wordpress block. I am aware of there is a API to add rewrite rule, just wanna know why it won't work for learning purpose.

Topic mod-rewrite url-rewriting htaccess Wordpress

Category Web


As it says in the file:

The directives (lines) between "BEGIN WordPress" and "END WordPress" are dynamically generated, and should only be modified via WordPress filters. Any changes to the directives between these markers will be overwritten.

Put your code before #BEGIN WordPress or after # END WordPress.

However, in the [L] flag means LAST, so no more rules will be run if that one has a hit.

So this rule will need to be above the # BEGIN WordPress

Try this .htaccess:


# Just to be safe, wrap it in IfModule mod_rewrite.c, so that 
# it does not kick in unless mod rewrite is enabled.
<IfModule mod_rewrite.c>
RewriteRule ^apply\/? https://docs.google.com/forms/d/e/1FAIpQLSf5IrOhg0E_NAGZnOvMuaXhU80sio8bukaWVBkb87eEOa9kTw/viewform [L]
</IfModule>

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

There is a great tool to debug your .htaccess file, it's called htaccess tester. I prepared two examples:

Why it won't work when your rule is in below the line containing RewriteRule . /index.php. ✅ The fully working example I posted above.

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.