我的公司现在一直坚持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。希望有人已经通过这个或者可以解决一些问题......
答案 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?
第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>