我希望用这个.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]
说实话,我不知道这些是做什么的。我把它们从我读过的文章的混乱中混合在一起。任何帮助将不胜感激。
答案 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等等