htaccess regex wordpress not working - regex

I have a wordpress site set up with some custom redirect rules set up. The weird thing is I am sure these all of these were working before but now some of them no longer function.
Here is the complete htaccess file:
RewriteRule ^properties/([a-zA-Z]+)/([a-zA-Z\+\'.]+) /properties/?prov=$1&city=$2&%{QUERY_STRING} [R,NC]
RewriteRule ^properties/([0-9]+) /properties/?id=$1 [R,NC]
RewriteRule ^([0-9][0-9][0-9][0-9][0-9])$ /properties/?id=$1 [R,NC]
RewriteRule ^expand.php?id=([0-9]+) /properties/?id=$1 [R,NC]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
right now the only rule that actually works (other than the directory change for wordpress itself) is
RewriteRule ^([0-9][0-9][0-9][0-9][0-9])$ /properties/?id=$1 [R,NC]
I've tried throwing in simple rules to test, like
RewriteRule ^/bob /contact [R,NC]
but that doesn't work either
* Edit the below issue was fixed and is definitely not related to the issue above (but I'll leave it here in case there was a comment that referenced it)*
Also, not sure if this gives any insight but on the page where the redirect actually works, my wordpress theme is broken, the wp_footer never fires and the rest of the page fails

Have it like this:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^bob/?$ /about [R,NC,L]
RewriteRule ^properties/([a-zA-Z]+)/([a-zA-Z+'.]+)/?$ /properties/?prov=$1&city=$2 [R,NC,QSA,L]
RewriteRule ^(?:properties/)?([0-9]+)/?$ /properties/?id=$1 [R,QSA,NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]

There are a couple of possible causes... You aren't enabling mod_rewrite until after your RewriteRules, the custom rules should be included inside their own <IfModule mod_rewrite.c> tag with RewriteEngine on preceding them, and you probably want to set RewriteBase to whatever the root of your site is (perhaps /wordpress subdirectory? you may want to include what you would like these rules to rewrite to and from.) You cannot match on a querystring within a RewriteRule either, you have to use a RewriteCond.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^properties/([a-zA-Z]+)/([a-zA-Z\+\'.]+) /properties/?prov=$1&city=$2&%{QUERY_STRING} [R,NC]
RewriteRule ^properties/([0-9]+) /properties/?id=$1 [R,NC]
RewriteRule ^([0-9]{5,5})$ /properties/?id=$1 [R,NC]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
Also updated ^([0-9][0-9][0-9][0-9][0-9])$ to the form ^([0-9]{5,5})$ which is a bit more readable.
Your example/test should look like the following - omit the / because it is set in the RewriteBase.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^bob /about [R,NC]
</IfModule>

Related

.htaccess rules resulting in 404 error for /page/ if /page.[ext] is present

The problem: the presence of an identical URL to /page/, but with some file extension, i.e., /page.xml, results in a 404 for /page/.
So for example, my HTML sitemap, example.com/sitemap will 404 if example.com/sitemap.xml is present.
The .htaccess file of my Wordpress site contains rewrite conditionals that, as expected, appends a trailing slash to pages in the form of example.com/page so they are rewritten as example.com/page/.
.htaccess as follows:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# BEGIN MainWP
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/plugins/mainwp-child/(.*)$ /wp-content/plugins/THIS_PLUGIN_DOES_NOT_EXIST [QSA,L]
</IfModule>
# END MainWP
So after some digging, I found the solution, which was to simply disable Multiviews in my .htaccess file, like so:
Options -MultiViews

Root site .htaccess interferes with WordPress

I admit, my .htaccess/regex is the weakest part of my game in development. It's a problem, especially today.
I've got a client's root site in ASP, the access on public_html is applied as follows:
RewriteEngine on
RewriteRule ^$ index.php [L]
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico|xmlpdf\.cfm|public|dynamic|googlead5e4138365a1f11.html|sitemap.xml)
RewriteRule ^(.*)$ index.php/$1 [L]
Options -Indexes
They want to install WordPress in /public_html/inventory. Obviously, the recursive nature of .htaccess is causing huge conflicts. Problem is, I'm not entirely sure how to resolve a conflict of this nature. Not that anyone here needs the review, but the default WP .htaccess is:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
I'm hoping someone can tell me how to relinquish the root folder's icy grip on the WordPress sub-folder.
Thanks bunches.
This should be root .htaccess:
Options -Indexes
RewriteEngine on
# skip WP dir
RewriteRule ^inventory(/|$) - [L,NC]
RewriteRule ^$ index.php [L]
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico|xmlpdf\.cfm|public|dynamic|googlead5e4138365a1f11.html|sitemap.xml)
RewriteRule ^(.*)$ index.php/$1 [L]
This should be WP /inventory/.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /inventory/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

Wordpress: How can I redirect all wordpress tags from subdirectory (subfolder) to another one

I changed my permalinks and it working fine, but I need to redirect old tag folder to archives/tag to not lose links which google indexed
below is my .htaccess file in the root of my recipes site http://foodonia.com
# Use PHP5.4 as default
AddHandler application/x-httpd-php54 .php
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Example: http://foodonia.com/tag/fudge/ should redirect to http://foodonia.com/archives/tag/fudge
I tried to add each one of blow codes but redirect not working
#RewriteRule tag/(.*) archives/tag/$1 [NC,L]
#RewriteRule tag/$ /archives/tag/$1 [NC,L]
#RewriteRule tag/ /archives/tag [L]
even I tried redirect 301 ^/tag/fudge/ http://foodonia.com/archives/tag/fudge/ but it didn't work
I try to search for solution but can't find similar post
You need to use rules in correct order i.e. to use this 301 first before other WP rules.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule (tag/.*)$ /archives/$1 [NC,NE,L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Can I disable rewrite for specific directory?

I have a website that runs with cakePHP, and i have an aplication in www/application_test that does not work using the rewrite rule.
There is a method to disable the rule for directories within www/application_test?
Follows my .htaccess file:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(app|cake|vendors)/(.*)$ app/webroot/$1 [L]
RewriteRule ^$ app/webroot/ [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
<IfModule mod_ssl.c>
#Include conf/ssl.conf
</IfModule>
Ad this line just below RewriteEngine On line
# ignore application_test for any rewrites
RewriteRule ^application_test(/|$) - [NC,L]

HTAccess Redirect all Subpages

I'm trying to redirect all subpages of a page using .htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^/news-and-events(.*)$ /news/$1 [R=301,L,NC]
The above doesn't seem to be working, what's the easiest way to do this in as few lines as possible?
My HTAccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
RewriteRule ^news-and-events(.*)$ /news/$1 [R=301,L,NC]
Remove leading slash:
RewriteRule ^news-and-events(.*)$ /news/$1 [R=301,L,NC]
.htaccess is per directory directive and Apache strips the current directory path from RewriteRule URI pattern.