通过htaccess删除.php扩展名后,查询字符串URL产生500内部错误

时间:2014-04-14 06:50:18

标签: php regex apache .htaccess mod-rewrite

在root上使用.htaccess文件我使用下面的代码从url中删除了.php扩展名 -

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?foobar.com$
RewriteCond %{REQUEST_URI} !^/foobar/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /foobar/$1

RewriteCond %{HTTP_HOST} ^(www.)?foobar.com$
RewriteRule ^(/)?$ foobar/index.php [L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]

我在htaccess中有上面的代码。但是当ajax调用如下所示 -

foobar.com/user/get/?a=getTaggedUsers&forumId=368

这会产生500个内部服务器错误。

如果我删除.htaccess文件中的最后一行,即 -

RewriteRule ^([^\.]+)$ $1.php [NC,L]

然后上面的查询字符串网址工作正常。但是现在我必须在网址中添加.php扩展名。那么如何在没有php扩展的情况下使查询字符串工作?

1 个答案:

答案 0 :(得分:1)

让您的代码如下:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?foobar\.com$
RewriteCond %{REQUEST_URI} !^/foobar/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ foobar/$1 [L]

RewriteCond %{HTTP_HOST} ^(www.)?foobar\.com$
RewriteRule ^/?$ foobar/index.php [L]

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