2011-09-22 102 views
1

上的PHP扩展有没有办法.htaccess文件可写,这样默认web服务器

http://www.mysite.com/about 

负载about.php

和同样的任何文件?

我试图

RewriteEngine On 
RewriteRule ^([0-9A-Za-z]+)$ $1.php 

,但它似乎并没有工作。

+0

你的重写是什么?我的意思是它如何失败? –

+0

重写规则看起来不错。只是为了确认,你正在运行Apache Web服务器,对。这种技术显然不适用于IIS。 – Spudley

+0

@迈克尔它什么都不做 - 它似乎不工作。 – Rio

回答

0

这是最常见的规则(利用mod_rewrite的 - 确保它被加载并启用) - 这将确保这样的PHP文件改写前确实存在(是的,这是一个慢一点,但更安全):

Options +FollowSymLinks 
RewriteEngine On 

# add .php file extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)$ $1.php [L] 

或者只是使用:

Options +MultiViews 

这将打开关于“内容谈判”。但它有一些缺点。

例如:让我们假设你在你的网站的根文件夹中有hello.html & hello.php。如果你要求example.com/hello,启用该选项,Apache将查找替代名称(同名但扩展名不同),并且将服务于hello.htmlhello.php(我无法确定哪个是首选)。

但是,如果您只有一个文件具有这样的唯一名称(例如hello.php),那么这里根本没有问题。

+0

我尝试了你在http://www.justnear.me/about上所说的话,它似乎不工作(about.php在那里)。 – Rio

+0

1)你在你自己的服务器..或共享主机? 2)请仔细检查/确认托管公司mod_rewrite已安装并启用,3).htaccess文件已启用(一些托管公司为了安全和性能目的禁用它们)。 4)检查你的Apache错误日志中是否有可能的错误信息。规则和替代方法绝对是**工作解决方案 - 它必须是您特定的Apache配置/设置。 – LazyOne

+0

另外...你有其他重写规则吗?他们可能会干涉这个规则(这一切都取决于你的规则和他们的顺序)。 – LazyOne