htaccess重写在localhost中给出错误500

时间:2014-03-01 16:10:47

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

我一直在网上搜索,但似乎没有任何效果。我在Apache和Xampp的本地工作。我创建了一个.htaccess文件,并重写了以.php和.html结尾的所有网址,以删除扩展名,我创建了一个自定义的404页面。一切都很好。但是,现在我正在尝试重写一个看起来像

的动态网址

/TotinCoblan/update/Wine?id=2

/TotinCoblan/update/Wine/2

我不断收到错误500.这是我的.htaccess文件。据我所知,

RewriteCond %{REQUEST_FILENAME} !-f

应该避免无限循环。

非常感谢任何帮助。

RewriteEngine On

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

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/update/Wine/([0-9]+)/?$ /update/Wine?id=$1 [L]

ErrorDocument 404 TotinCoblan/errors/404

3 个答案:

答案 0 :(得分:0)

试试这段代码:

ErrorDocument 404 /TotinCoblan/errors/404

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^update/Wine/([0-9]+)/?$ /update/Wine?id=$1 [L,QSA]

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

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

答案 1 :(得分:0)

您应该将-f支票更改为使用%{DOCUMENT_ROOT}${REQUEST_URI}%{REQUEST_FILENAME}的问题是mod_rewrite将部分尝试将URI映射到文件,它会占用PATH INFO,这意味着请求是这样的:

/something/foo/anything/

并且您碰巧有一个现有的文件/脚本:

/something/foo.php

然后RewriteCond %{REQUEST_FILENAME}\.php -f检查将为真,并且它假设您的URI是:

/something/foo.php/anything/

而且,就像你的代码一样,.php会附加到结尾:

/something/foo/anything/.php

导致无限循环。尝试类似:

RewriteEngine On

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

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/update/Wine/([0-9]+)/?$ /update/Wine?id=$1 [L]

ErrorDocument 404 TotinCoblan/errors/404

答案 2 :(得分:0)

我终于使用了这段代码,我不得不使用RewriteCond%{REQUEST_FILENAME}! - f,因为页面只在重新加载两次后加载。随着指令第一次加载。

RewriteCond %{REQUEST_FILENAME} !-f
ErrorDocument 404 /TotinCoblan/errors/404

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ - [L]

RewriteRule ^update/Wine/([0-9]+)/?$ update/Wine.php?id=$1 [L,QSA]

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

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