简单的.htaccess重写不适用于GoDaddy

时间:2015-06-17 03:48:32

标签: php apache .htaccess mod-rewrite url-rewriting

我的公司现在一直坚持GoDaddy,我的.htaccess重写不起作用。这在我的localhost上工作正常。

目的是让 example.com/about 实际获得 example.com/about.php ,网址仍显示 example.com/约

这是我的.htaccess文件:

Options +FollowSymlinks -MultiViews -Indexes

RewriteEngine on

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

我已经阅读了有关GoDaddy服务器不一致的.htaccess行为的所有其他帖子。我确实让他们确认mod_rewrite已启用,我的PHP是5.4.19。希望有人已经通过这个或者可以解决一些问题......

8 个答案:

答案 0 :(得分:3)

您应该简化规则。去爸爸很讨厌,但这应该有效。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /$1.php [L]

答案 1 :(得分:3)

您的服务器必须是Linux才能运行.htaccess。在GoDaddy服务器上,它只能用于Linux托管而不是Windows托管。对于Windows主机,您必须配置web.cong以启用重写规则。

答案 2 :(得分:2)

这已经出现了很多次 - GoDaddy就是这些问题的代名词。我推荐以下内容:

首先,将其放在.htaccess文件的顶部:

RewriteEngine On

# Remove php extension from the request by means of a redirect.
# This should really be for php files that exist
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ /%1 [R,L,NC]

然后在上面的内容之后尝试一个

# 1. Map the request to a PHP file, if one exists
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
# 2. Map the request to a PHP file, if one exists (alternative method)
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ /$1.php [L]
# 3. Map the request to a PHP file, provided the request is not
#    a file or a directory. The PHP file in question does not need
#    to exist on the file system.
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule ^(.*)$ /$1.php [L]    

手头的问题可能与Options指令有关。根据过去的经验,它通常来自在此指令中使用Includes - 我知道GD不允许这些。但是,您没有使用它们,因此请尝试以下任何组合来查看500错误是否显示。

Options +FollowSymLinks -Multiviews
Options +FollowSymLinks
Options -Multiviews

GD默认关闭Indexing,因此无需在Options指令中使用它。

附注:您可能已经知道这一点,但不要在GD托管的php_value文件中使用php_flag.htaccess。相反,您需要创建一个php5.ini文件,其中设置了值和标志。

更新:我已删除RewriteBase(因为已知会导致某些用户出现问题)并相对于域的根目录进行重定向/重写。

答案 3 :(得分:1)

我终于想到了这一个。再次感谢所有花时间提供帮助的人。在我的主机帐户的根目录中有另一个.htaccess文件导致500错误,我删除了。然后我得到400错误,我可以使用RewriteBase解决。这是工作的.htaccess文件:

RewriteEngine On
RewriteBase /this_sites_subdirectory/
RewriteRule ^/?$ /1 [L]

Options -MultiViews                

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php 

答案 4 :(得分:1)

因为大多数站点都位于.php或.html

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

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

答案 5 :(得分:0)

谢谢。 经过一周的GD支持头痛,这也帮助了我

以下是为了让我的Subdreamer(是的,我知道,ughhh)网站仍然有友好的URL工作所做的改变我们做了

RewriteEngine On
RewriteBase /
RewriteRule ^/?$ /1 [L]

Options -MultiViews                

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php

祝其他人好运

答案 6 :(得分:0)

在有关该主题的GoDaddy help page中,它表示

  

包含重写规则的.htaccess文件必须与目标文件位于同一目录中。

因此,尝试在重写URL的每个目录中放置一个单独的.htaccess文件。

答案 7 :(得分:0)

第1步:检查GoDaddy服务器是否使用IIS或apache?

  • 转到plesk面板
  • 从左侧菜单中单击“网站和域名”
  • 查找IIS设置

IIS Settings

第2步:如果服务器使用IIS,则需要使用Web.config文件而不是.htaccess文件

示例Web.config文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
    <rewrite>
        <rules>
            <clear />
            <rule name="Rewrite to index.php" stopProcessing="true">
                <match url="^(.*)$" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="/indus-admin/index.php?page={R:1}" appendQueryString="true" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>