.htaccess将html重定向到php并访问没有.php扩展名的php文件

时间:2013-03-19 20:31:11

标签: php linux .htaccess mod-rewrite

我希望用这个.htaccess文件完成两件事。

1).html的所有请求都指向.php 例如。用户转到:http://www.mywebsite.com/contact.html 浏览器加载:http://www.mywebsite.com/contact.php

2)对http://www.mywebsite.com/contact的请求将加载contact.php (这应该适用于所有页面,而不仅仅是联系页面。

这是我的.htaccess文件。

Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]

说实话,我不知道这些是做什么的。我把它们从我读过的文章的混乱中混合在一起。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

尝试这样的事情。请遵循评论主题以获取安全隐患,但这就是您要求做的事情

RewriteEngine On
RewriteBase /

# Redirect HTML to PHP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).html$ $1.php [L]

# Otherwise, try PHP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php [L]

# Lastly, fallback to error page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . 404.php [L]

答案 1 :(得分:0)

我需要向你解释有关htaccess文件角色的事情;

在此示例中,htaccess将尝试匹配模式,如您所示;

如果模式匹配,则会发生一些操作;

用()标记所有数据,而不是从网址中提取所需的数据

对于每个规则,first()将具有$ 1 id,seccond()将具有$ 2,依此类推

如果$ 1是'help',它将加载'helpme.php'文件,而不是'help.php'文件;它将加载您希望加载的文件;

使用$ 1,$ 2 ...您可以将参数和值传递给真实/已翻译的网址请求

在我的例子中,我想总是使用index.php文件,你将使用你需要的任何文件

Options +SymLinksIfOwnerMatch

RewriteEngine on

RewriteRule ^([a-zA-Z-]+)$ index.php?action=$1 [NC,L]

RewriteRule ^(member)-([0-9-]+)$ index.php?action=member&id=$2 [NC,L]

RewriteRule ^([a-zA-Z-]+)/([a-zA-Z-]+)-([0-9-]+)$ index.php?action=$1&saction=$2&sid=$3 [NC,L]

RewriteRule ^([a-zA-Z-]+)/([0-9-]+)$ index.php?action=$1&id=$2 [NC,L]

RewriteRule ^([0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/(.*).html$ index.php?action=details&id=$1&p1=$2&p2=$3&p3=$4 [NC,L]

答案 2 :(得分:0)

如果您希望所有.html文件都指向.php文件,那么这样做的简单方法就是

RewriteRule ([\w\d\-_]+)(\.html)? $1.php [L]

这允许您也使用子目录

contact.html会重定向到contact.php

/subdir/page.html会重定向到/subdir/page.php等等