一切正在我的localhost上运行,其中没有使用.htaccess文件。但是当我去实际的网站时,我遇到了AJAX请求的问题。我发现导致问题的部分是删除.php扩展名。
这是我的.htaccess文件
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
## redirect to 404 page when file does not exist
ErrorDocument 404 /404.php
## clean urls for blog.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+blog\.php\?title=([^\s&]+)&? [NC]
RewriteRule ^ /blog/%1? [R=302,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/([\w-+]+)/?$ /blog.php?title=$1 [L]
## remove index.php
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index
RewriteRule ^(.*)index$ /$1 [R=301,L]
## To remove .php file extension
## RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
## RewriteRule ^ %1 [R,NC]
## RewriteCond %{REQUEST_FILENAME}.php -f
## RewriteRule ^ %{REQUEST_URI}.php
通过评论最后四行来解决问题。但我希望能够删除.php并仍然使用ajax来表示形式。
这是ajax
$.ajax({
type:'post',
url:'inc/example.php',
data:$data,
async:false,
success:function(){
console.log('success');
},
error:function(r){
console.log(r.responseText);
}
});
ajax中的错误功能显示我的404错误页面。我尝试从ajax请求中的url中删除.php,没有用。然后我尝试导航到inc / example.php,我得到了404页面。 .htaccess文件位于根目录下,发出ajax请求的页面是根目录下的一个目录,因此404错误发生在两个目录深处。
答案 0 :(得分:2)
您需要排除重定向POST请求。您的ajax代码通过POST提交到example.php
,当规则将您重定向到没有php
扩展名的网址时,您将丢失请求正文。您应该使条件仅匹配GET和HEAD请求:
## To remove .php file extension
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\s([^.]+)\.php [NC]
RewriteRule ^ %2 [R,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php