如何在godaddy linux主机上使用htaccess删除.php扩展名

如何使用htaccess文件删除.php扩展名。 我已经尝试了很多代码(我在互联网上发现,但没有得到成功。内部服务器错误是定期显示,我正在使用Godaddy Linux主机。

此代码是我正在使用的最新版本。

<IfModule mod_rewrite.c> Options All -Indexes Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / # Unless directory, remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/$ http://a.sprybirds.com/$1 [R=301,L] # Redirect external .php requests to extensionless url RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ RewriteRule ^(.+)\.php$ http://a.sprybirds.com/$1 [R=301,L] # Resolve .php file for extensionless php urls RewriteRule ^([^/.]+)$ $1.php [L] </IfModule> 

站点停放在子域http://a.sprybirds.com上 ,文件夹顺序就像web-root / sub_folder / site_folder /。 请朋友帮帮我。

./public_html/中有.htaccess文件吗? 如果是这样,它里面有什么? .htaccess的工作方式是给出最接近实际根目录的目录。

举个例子:

 /home/username/public_html/.htaccess 

被赋予更高的优先权(即更多的控制权)

 /home/username/public_html/sub_directory/.htaccess 

如果你是主要的.htaccess文件是一种方式设置规则,子目录设置他们另一个,它可能会遇到问题(即错误)。

如果你在你的实际web根目录中设置,下面几行可能会导致一些问题,因为cPanel允许服务器pipe理员在WHM中默认设置这些选项。 如果这些已经设置(特别是-Indexes),你可能会看到一个错误。

 Options All -Indexes Options +FollowSymLinks -MultiViews 

注意 :-Indexes指令通常在客户端被放置到服务器之前默认设置(或者应该是,除非有特定的原因),FYI。 这是更安全的build议,以防止目录浏览,因为不是每个客户端都知道,除非在每个目录中有一个索引。[ext]文件,他们的目录是敞开的,供任何想看的人浏览。


如果删除这些解决了错误,那么你已经find了问题:)。 如果删除这些行不起作用,试验和错误是我们需要开始的地方。

回到顶端,查看位于目录之上的目录。 检查.htaccess文件,并确保你有“显示或显示隐藏的文件”选中或设置为“是”在您使用的S / FTP程序,因为它们并不总是可见的默认情况下。

从这里开始,最好的办法就是备份每个.htaccess文件并重新添加它们,直到遇到另一个错误。 这样,您可以标记导致错误的file upload,我们可以看看那个。


更新#01

由于错误的罪魁祸首最有可能的确是-Indexes,你可以将以下内容添加回.htaccess文件:

 Options +FollowSymLinks -MultiViews 

如果这不能解决404,请尝试这一点:

 Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / # Adds Trailing Slash to the URI as long as it's not for a # file. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$ RewriteRule ^(.*)$ http://a.sprybirds.com/$1/ [R=301,L] # Checks to make sure the request is a directory. # Checks to see if the request matches a file with a .php ext. # If all is well, push the request through to the matching file. RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^\.]+)/$ http://a.sprybirds.com/$1.php