我尝试在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
顺便说一下,当我点击一个类别的链接时,我得到的是完整的文章列表,而不是仅限于所选类别的文章。
谢谢你的帮助
答案 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]