.htaccess redirect to error page if port is not 80

I’m running a portable server through usb stick. The thing is I also have WAMP installed in my local machine and Apache somehow gets started on windows startup, because of some random reason which I don’t recall now and it can’t be changed. I want to prepare my portable server in situations like this, so closing httpd.exe from process and starting my portable server is not an option. Anyway, because of already active httpd.exe my portable server’s WordPress site can only be accessed through localhost:81 – this is a problem as WP site is very dependent on the URL and I don’t want to include the url with port on WP database.

Here is what I want to do through .htaccess:

Read More
  • On any path except for error.php file check if not port 80
  • If not port 80 redirect to /error.php?code=port

It it possible for it to have priority over WP redirection or URL handling?

In the error.php I provided info on how to manually close httpd.exe and such so my family and friends can access the portable site. It’s sort of like a gallery and calender application for events and other such stuff…

Please help? I’m I can’t figure it out at all. I know others may not have apache already running, but I want to prepare for such a situation.

Something like the following, but the following doesn’t work.

# BEGIN WordPress
<IfModule mod_rewrite.c>
    <If "%{SERVER_PORT} = 80">
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </If>
    <Else>
    RewriteEngine On
    RewriteRule ^(error.php)($|/) - [L]
    RewriteRule ^(.*)$ /error.php?code=port [L]
    </Else>
</IfModule>
# END WordPress

Related posts

Leave a Reply

3 comments

  1. #  <If "%{SERVER_PORT} = 80">
    RewriteEngine On
    RewriteBase /
    RewriteCond  %{SERVER_PORT} ^80$ 
    RewriteRule ^index.php$ - [L]
    RewriteCond  %{SERVER_PORT} ^80$ 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    #</If>
    #<Else>
    RewriteEngine On
    RewriteCond  %{SERVER_PORT} !^80$ 
    RewriteRule ^(error.php)($|/) - [L]
    RewriteCond  %{SERVER_PORT} !^80$ 
    RewriteRule ^(.*)$ /error.php?code=port [L]
    #</Else>
    
  2. You can try this apache config

    RewriteEngine on 
    RewriteCond  %{SERVER_PORT} !^80$ 
    RewriteRule ^(.*) http://%{SERVER_NAME}:80%{REQUEST_URI} 
    
    RewriteCond  %{SERVER_PORT} ^80$ 
    RewriteRule .* http://example.com/index.php [L]
    

    The 1st paragraph redirects if its NOT 80

    the 2nd is just an alternative you can try, if you want only that matches 80

    for more info on rewrites,
    http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

  3. VirtualHosts are what you are looking for.

    A small example of how you can achieve http://wplocal/ or http://wp.local/ to point to /var/www/wp AND http://localhost/ or http://http.local to point to /another/root/path.

    NameVirtualHost *:80
    
    <VirtualHost *:80>
        ServerAdmin wp@you.com
        DocumentRoot "/var/www/wp"
        ServerName wplocal
        ServerAlias wp.local
        ErrorLog "/somepath/here"
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerAdmin you@you.com
        DocumentRoot "/another/root/path"
        ServerName localhost
        ServerAlias http.local
        ErrorLog "/logs/path"
    </VirtualHost>
    

    See this for cool images that explain that stuff.

    Hope that helped.