.htaccess 404和URL重写问题

时间:2017-05-27 21:31:29

标签: php .htaccess mod-rewrite

我的.htaccess里面有以下代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ 404.php [L]

这样做的目的是

  • 从网址

  • 中删除.php扩展名
  • 重写网址,以便在斜杠后显示POST数据,即如果原始网址为website.com/sheet?username=bob,则会将其重写为website.com/sheet/bob

  • 当找不到给定的特定网址时,重定向到自定义404页面

此代码在通过WAMP进行本地开发时表现良好,我可以根据<user>的{​​{1}}值查看不同的信息。

当我将更改上传到实际网站时,代码不再有效,并将website.com/sheet/<user>显示为我的自定义404页面。

我的website.com/sheet/bob错了吗?对不起,我对.htaccess非常缺乏经验。

修改如果我删除.htaccess,如果我尝试转到.htaccess,则会收到以下错误:

website.com/sheet.php

会在我的文档根目录中生成Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, webmaster@website.com and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request. 文件,因此我不确定如何查看问题:s

由于

1 个答案:

答案 0 :(得分:0)

问题似乎与.htaccess

有关

最初:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ 404.php [L]

现在:

ErrorDocument 404 /404.php

Options -Indexes -MultiViews
RewriteEngine on

RewriteCond %{THE_REQUEST} \.php [NC]
RewriteRule ^(?!404\.php)$ - [L,NC,R=404]

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

我对.htaccess文件不是很擅长,所以我不能告诉你确切的问题是什么,但这种改变似乎完成了我的目标,而没有给出任何错误。