【发布时间】:2015-02-07 14:19:49
【问题描述】:
在 Ubuntu 14.04 上,使用 Apache 2.4.7,我试图将子域中的所有 HTTP 请求重定向到单个 PHP 文件。
例如,请求api.exampleapp.com/auth/login将被重定向到/var/www/example-api/api.php?q=auth/login
所有代码位于:
/var/www/example-api
此目录中有一个 api.php 脚本,它处理所有内容,以及其他不应公开的库和资源。
这是/etc/apache2/sites-available/api.exampleapp.com.conf中的配置:
<VirtualHost *:80>
ServerAdmin admin@exampleapp.com
DocumentRoot /var/www/example-api
ServerName api.exampleapp.com
<Directory "/var/www/example-api">
Options -Indexes
RewriteEngine On
LogLevel alert rewrite:trace6
RewriteBase /
RewriteRule ^(.*)$ api.php?q=$1 [QSA,L]
</Directory>
</VirtualHost>
但是当我请求 /var/www/example-api 时,我得到了 500 响应。
这是我在error_log 中得到的输出(删除了时间等不相关数据):
[rid#a0/initial] [perdir /var/www/example-api/] add path info postfix: /var/www/example-api/auth -> /var/www/example-api/auth/login
[rid#a0/initial] [perdir /var/www/example-api/] strip per-dir prefix: /var/www/example-api/auth/login -> auth/login
[rid#a0/initial] [perdir /var/www/example-api/] applying pattern '^(.*)$' to uri 'auth/login'
[rid#a0/initial] [perdir /var/www/example-api/] rewrite 'auth/login' -> 'api.php?q=auth/login'
[rid#a0/initial] split uri=api.php?q=auth/login -> uri=api.php, args=q=auth/login
[rid#a0/initial] [perdir /var/www/example-api/] add per-dir prefix: api.php -> /var/www/example-api/api.php
[rid#a0/initial] [perdir /var/www/example-api/] trying to replace prefix /var/www/example-api/ with /
[rid#a0/initial] strip matching prefix: /var/www/example-api/api.php -> api.php
[rid#a0/initial] add subst prefix: api.php -> /api.php
[rid#a0/initial] [perdir /var/www/example-api/] internal redirect with /api.php [INTERNAL REDIRECT]
[rid#20/initial/redir#1] [perdir /var/www/example-api/] strip per-dir prefix: /var/www/example-api/api.php -> api.php
[rid#20/initial/redir#1] [perdir /var/www/example-api/] applying pattern '^(.*)$' to uri 'api.php'
[rid#20/initial/redir#1] [perdir /var/www/example-api/] rewrite 'api.php' -> 'api.php?q=api.php'
[rid#20/initial/redir#1] split uri=api.php?q=api.php -> uri=api.php, args=q=api.php&q=auth/login
[rid#20/initial/redir#1] [perdir /var/www/example-api/] add per-dir prefix: api.php -> /var/www/example-api/api.php
[rid#20/initial/redir#1] [perdir /var/www/example-api/] initial URL equal rewritten URL: /var/www/example-api/api.php [IGNORING REWRITE]
重写后如何防止内部重定向?
我尝试添加 RewriteCond %{REQUEST_URI} !/api.php 和其他一些变化,但没有任何效果。
【问题讨论】:
-
如果您不使用
htaccess,那么最好从问题中删除该标签。 -
好的,虽然我认为
.htaccess用户也可以从这个问题中受益。
标签: apache mod-rewrite redirect httpd.conf