.htaccess文件路径不同如何解决

时间:2018-04-13 18:49:34

标签: php .htaccess

我已将www.site.com/asd重定向到www.site.com/index.php?page=asd。但是,我想补充一点,www.site.com/products/asd将重定向到www.site.com/index.php?page=products&item=asd

我似乎无法使其正常工作,我将此作为我的基本代码:

RewriteEngine On

RewriteRule ^(admin|pictures)($|/) - [L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_URI} !=/pictures/


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



RewriteRule ^(.+)$ /index.php?page=$1 [L,QSA]

我尝试添加:

RewriteRule ^([^/]*)/([^/]*)$ /index.php?page=$1&item=$2 [L]

在.htaccess文件的各个位置,这会导致: 500内部服务器错误 要么 0 CSS文件加载在.com / products / asd中没有图片加载.com / anyfile

我理解它与路径有关,但这是一个很好的方法吗?我可以在.htaccess文件中以某种方式解决它,或者我是否需要添加一些检查,如果它的产品页面和产品显示,请包括../css?

2 个答案:

答案 0 :(得分:0)

^(.+)$正则表达式为您提供“500内部服务器错误”,因为重定向与规则匹配。因此,您收到以下错误:

  

由于可能的配置错误,请求超出了10个内部重定向的限制。

您可以使用:

RewriteRule ^products/(.+)$ index.php?page=products&item=$1 [L,QSA]
RewriteRule ^([^\.]+) index.php?page=$1 [L,QSA]

因此,以下网址将重定向到:

  • /products/asdindex.php?page=products&item=asd
  • /asdindex.php?page=asc

答案 1 :(得分:0)

更改最后两行,如下所示:

RewriteRule ^([^/]+)/?$  /index.php?page=$1 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?page=$1&item=$2 [L]

您应该在第一个规则中指定URI必须来自/whatever//whatever,以便第二个匹配/whatever/whetever/whatever/whatever/,并且两者都可以单独使用干扰。