如果端口不是80,则.htaccess重定向到错误页面

时间:2012-09-22 03:53:15

标签: php wordpress apache .htaccess port

我通过usb棒运行portable server。问题是我也在我的本地机器上安装了WAMP,并且Apache以某种方式在Windows启动时启动,因为一些随机的原因我现在不记得并且它无法更改。我希望在这种情况下准备我的便携式服务器,因此从进程中关闭httpd.exe并启动我的便携式服务器不是一种选择。无论如何,由于已经活跃的httpd.exe我的便携式服务器的WordPress站点只能通过localhost访问:81 - 这是一个问题,因为WP站点非常依赖于URL,我不想在WP上包含带端口的url数据库中。

这是我想通过.htaccess做的事情:

  • 在除error.php文件之外的任何路径上检查是否不是端口80
  • 如果没有端口80重定向到/error.php?code=port

它可能优先于WP重定向或URL处理吗?

在error.php中,我提供了有关如何手动关闭httpd.exe等信息,以便我的家人和朋友可以访问便携式网站。它有点像事件和其他类似东西的画廊和日历应用......

请帮帮忙?我根本无法解决这个问题。我知道其他人可能没有apache已经运行,但我想为这种情况做好准备。

如下所示,但以下情况不起作用。

# 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

3 个答案:

答案 0 :(得分:2)

#  <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>

答案 1 :(得分:0)

你可以试试这个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]

第1段重定向,如果它是NOT 80

如果您只想匹配80

,那么第二个只是您可以尝试的替代选择

有关重写的更多信息, http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

答案 2 :(得分:0)

VirtualHosts正是您要找的。

如何实现http://wplocal/ http://wp.local/指向/var/www/wphttp://localhost/ http://http.local指向/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>

请参阅this了解可解释这些内容的酷炫图片。

希望有所帮助。