在子域上设置Apache HTAccess重写规则

时间:2014-01-16 20:27:53

标签: apache .htaccess url-rewriting rewrite

我正在为我的测试服务器使用子域名URL。类似的东西:

http://dev.mysite.com

我的.htaccess文件中有以下内容:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1
RewriteRule ^about/(.*)$ /about.php?request=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

以上内容适用于生产(非子域)URL集。但它并没有完全削减我的开发盒。例如,如果我输入

http://dev.mysite.com/about

我收到404错误。但是以下附加的.php扩展名可以使用。

http://dev.mysite.com/about.php

我猜这与处理www子域的第一个重写条件有关。如何修改我的.htaccess文件以考虑dev子域?

2 个答案:

答案 0 :(得分:1)

您的.htaccess似乎未启用。

通过在.htaccess上添加相同的垃圾文本并查看是否生成500(内部服务器)错误,验证是否启用了.htaccess

要启用 .htaccess,您的httpd.conf文件将需要此行:

AllowOverride All

答案 1 :(得分:0)

您需要至少AllowOverride AllAllowOverride FileInfo才能使htaccess文件在您的server / vhost配置中运行。 FileInfo适用于mod_rewrite。

此外,请确保已加载mod_rewrite。

您还需要更改此条件:

RewriteCond %{REQUEST_FILENAME}.php -f

为:

RewriteCond %{DOCUMENT_ROOT}/$1.php -f

因为mod_rewrite会识别出about有一个php文件,所以/about/something通过了-f测试,结果是/about/something.php