为什么我的htaccess没有正确重写

时间:2015-08-07 20:20:53

标签: regex apache .htaccess mod-rewrite rewrite

我的htaccess文件存在问题,无法确定是否是我的配置,或者是服务器缓存等因为我的网址搞乱了。

我的文件如下

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^website.com$
RewriteCond %{HTTPS} off
RewriteRule (.*) https://website.com/$1 [R=301,L]

RewriteRule ^([a-z]+)\/?$ $1.php [NC]

第一条规则是将www移至非www,它有效。

第二条规则是将http移至https,它也有效。

第三条规则是将网址/anyFile调用anyFile.php,但保留一个可爱的网址。

问题是它调用了anyFile.html,而不是PHP,如果我删除了所说的HTML文件,那么我会得到404.

是的,它可以在URL中键入anyFile.php,但我希望URL中没有.php。 如果它不够明显,它应该适用于任何文件名,而不仅仅是一个文件名。

非常感谢任何和所有帮助。

2 个答案:

答案 0 :(得分:1)

使用以下代码替换.htaccess规则:

Options -MultiViews
RewriteEngine On
RewriteBase /

# single rule for http->https and www removal
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://website.com/$1 [R=301,L]

# hide .php extension
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-z]+)/?$ $1.php [NC,L]

答案 1 :(得分:0)

我最近也学会了如何做htaccess,所以我还是新手,但我会写

RewriteRule ^([a-z]+)\/?$ helloWorld.php [NC]

将其重定向到helloWorld.php文件。

$1是一个get参数。