我一直在网上搜索,但似乎没有任何效果。我在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
答案 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