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

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

如何.php使用.htaccess文件删除扩展名。我尝试了很多示例,但都没有成功。经常出现内部服务器错误。我正在使用 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://subdomain.example.com,文件夹序列就像web-root/sub_folder/site_folder/

答案1

问题缺少示例 URL,但是这对于诊断此类问题确实至关重要……

# Resolve .php file for extensionless php urls 
RewriteRule ^([^/.]+)$ $1.php [L]

这仅匹配具有单个路径段的 URL,即实际上位于文档根目录中的 URL,例如。/foo它不会匹配具有多个路径段的 URL,即实际上位于子目录中的 URL,例如/foo/bar- 这可以解释为什么您会因为“子文件夹内的 php 文件”而获得 404 错误。

您需要删除RewriteRule 图案,以便匹配任意 URL 深度:

RewriteRule ^([^.]+)$ $1.php [L]

通过在否定字符类中包含斜杠,您仅匹配不包含斜杠的 URL。即,仅位于文档根目录中的 URL。

(无需反斜杠在字符类中使用时,对文字点进行转义。)

答案2

./public_html/ 中是否有 .htaccess 文件?如果有,里面有什么?.htaccess 的工作方式是将最接近实际根目录的目录置于最高优先级。

举个例子:

/home/username/public_html/.htaccess

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

/home/username/public_html/sub_directory/.htaccess

如果您的主.htaccess文件以一种方式设置规则而子目录以另一种方式设置规则,则可能会遇到问题(即错误)。

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

Options All -Indexes
Options +FollowSymLinks -MultiViews

笔记:此-Indexes指令通常在客户端被放置到服务器上之前默认设置(或者应该设置,除非有特殊原因不设置),仅供参考。这更像是一种安全建议,以防止目录浏览,因为并非每个客户端都知道,除非index.[ext]每个目录中都有文件,否则他们的目录将对任何想要查看的人开放。


如果删除这些行可以解决错误,那么您就找到问题了 :)。如果删除这些行不起作用,我们需要开始反复试验。

回到顶部,查看您遇到问题的目录上方的目录。检查 .htaccess 文件,确保您已在您使用的 S/FTP 程序中选中“显示或显示隐藏文件”或将其设置为“是”,因为默认情况下它们并不总是可见的。

从这里开始,最好的做法是备份每个 .htaccess 文件,然后逐个重新添加,直到遇到另一个错误。这样,您就可以记下哪个文件上传导致了错误,我们可以查看那个文件。


更新 #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://subdomain.example.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://subdomain.example.com/$1.php

相关内容