PHP文件在.htaccess重写规则后无法访问$ _GET变量

时间:2018-03-21 15:27:15

标签: php .htaccess get

我的网站上的网址中有许多带有查询字符串的PHP页面。我正在尝试更改SEO的URL,为此我正在使用.htaccess文件。

我是.htaccess的新手,所以这是相当基本的,我不确定我是否做得对,或者是否有更好的方法。

我的.htaccess文件:

RewriteEngine on

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

RewriteCond %{REQUEST_URI} !/.css$
RewriteCond %{REQUEST_URI} !/.js$
RewriteCond %{REQUEST_URI} !/.png$
RewriteCond %{REQUEST_URI} !/.jpg$

RewriteRule ^category/([0-9a-zA-Z]+) category.php?id=$1
RewriteRule ^product/([0-9a-zA-Z]+) product.php?id=$1
RewriteRule ^page/([0-9a-zA-Z]+) page.php?page_id=$1

这允许我在category.php?id=1访问category/1页面,这与我重写规则的其他页面相同。但是我的PHP脚本无法再从URL访问$ _GET变量,因此它正确地重写但现在无法显示任何内容?

我做错了什么或是否有更好的方法来实现这一目标。对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您需要关闭MultiViews选项,并对您的规则进行一些重构。

Options -MultiViews
RewriteEngine on

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

RewriteRule ^category/([0-9a-zA-Z]+)/?$ category.php?id=$1 [L,NC,QSA]
RewriteRule ^product/([0-9a-zA-Z]+)/?$ product.php?id=$1 [L,NC,QSA]
RewriteRule ^page/([0-9a-zA-Z]+)/?$ page.php?page_id=$1 [L,NC,QSA]

选项MultiViews(请参阅http://httpd.apache.org/docs/2.4/content-negotiation.html)由Apache's content negotiation modulemod_rewrite之前运行使用,并使Apache服务器匹配文件扩展名。因此,如果/file是网址,那么Apache将提供/file.html