2013-08-25 228 views
1

我试图从.htaccess文件中使用此代码(我承认我从这里复制/粘贴其他问题)的网站的URL中删除“.php”扩展名:“漂亮”的URL不工作

RewriteEngine on 
Options +FollowSymLinks  
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

.htaccess文件的其他行做的工作,比如,我有一个错误的重定向和:

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

所以,我知道.htaccess文件是在服务一般。

我不知道这方面会出现什么问题,所以我不确定从何处开始排除故障。有没有人有指针?

在此先感谢。

+0

你的规则有什么问题?人们仍然可以访问您的.php文件?因为你的规则是允许他们访问你的网站,比如'domain.com/index',它可以在内部重定向到'index.php',但仍然允许直接访问php。 – Prix

+0

对不起,我不清楚。我希望用户能够输入,例如,“domain.com/page”,然后查看“domain.com/page.php”中实际存在的内容。基本上,我希望“.php”对用户隐藏。但它不像我想的那样工作。如果我输入“domain.com/page”,则会出现404错误,而不是看到“domain.com/page.php”中的内容。感谢您的帮助。我对htaccess文件完全陌生,除了复制粘贴规则。我不知道从哪里开始解决这个问题,或者我在这里复制的规则甚至在语法上是否准确。 – leewaters

回答

1

鉴于您的域帐户是/home/youraccount/public_html,你.htaccess将与以下内容public_html文件夹中:

Options +FollowSymLinks -MultiViews 

RewriteEngine on 
RewriteBase/

# First we redirect the www to non-www 
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC] 
RewriteRule ^/?(.*)$ http://domain.com/$1 [R=301,L] 

# now we redirect phpless URLs internally to the php 
# if folder does not exist 
RewriteCond %{REQUEST_FILENAME} !-d 
# but the file exists and ends with .php 
RewriteCond %{REQUEST_FILENAME}\.php -f 
# redirect to name.php 
RewriteRule ^([^/]+)/?$ $1.php [L] 

注:如果你有更多的规则,这可能会发生冲突,所以我不得不看在你的规则的其余部分,但基本上上述应该按预期工作。

您将能够同时访问:

domain.com/index 

domain.com/index/ 

而且它会重定向到文件index.php

+0

这样做。非常感谢你的帮助。你能说出我使用的代码有什么特别错误,或者它完全是错误的路径吗? – leewaters

+0

@leewaters好的一件事是,你正在使用'^(。*)$',它会尝试将'domain.com/index /'与'domain.com/index/.php'匹配,这是行不通的由于结尾'/'除了它应该工作。在我的规则中,我所做的是,我得到的不是'/',并且最后一个'/'是可选的,这与使用'^(。*)/?$' – Prix