传递GET变量时PHP htaccess错误

时间:2016-06-13 14:25:43

标签: php apache .htaccess mod-rewrite

我尝试在PHP中访问GET变量时遇到问题,同时使用.htaccess文件重写SEO友好风格的URL。

使用像www.example.com/blog/index.php?article=foo-bar这样的网址我可以正确加载页面,但是当我使用类似www.example.com/blog/article/foo-bar的内容时/我有一个重定向到索引页面。

这是我的.htaccess文件(注意我正在使用规则删除URL中的index.php)

Options +FollowSymLinks

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blog/index.php?/$1 [L]
RewriteRule ^article/([a-zA-Z0-9]+)/$ /blog/index.php?article=$1 [QSA,L]
RewriteRule ^category/([a-zA-Z0-9]+)/$ /blog/index.php?category=$1 [QSA,L]
RewriteRule ^adm/$ /blog/index.php?page=admin [QSA,L]

在回复另一篇文章时,用户向我发送了此更正,但产生了错误500,我没有得到任何有关500错误的回复。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L] #This cause the error 500
RewriteRule ^article/([a-zA-Z0-9]+)/$ /blog/index.php?article=$1 [QSA,L]
RewriteRule ^category/([a-zA-Z0-9]+)/$ /blog/index.php?category=$1 [QSA,L]
RewriteRule ^adm/$ /blog/index.php?page=admin [QSA,L]
RewriteRule ^(.*)$ /blog/index.php?/$1 [L] # This too cause an error 500 in this position

顺便说一下,当我点击一个类别的链接时,我得到的是完整的文章列表,而不是仅限于所选类别的文章。

谢谢你的帮助

2 个答案:

答案 0 :(得分:3)

您需要使用OR进行测试:

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

答案 1 :(得分:1)

请尝试以下规则:

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} . [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^article/([\w-]+)/?$ /blog/index.php?article=$1 [QSA,L,NC]

RewriteRule ^category/([\w-]+)/?$ /blog/index.php?category=$1 [QSA,L,NC]

RewriteRule ^adm/?$ /blog/index.php?page=admin [QSA,L,NC]

RewriteRule ^(.*)$ /blog/index.php?/$1 [L,QSA]