我在网上找到了这个解决方案:

RewriteEngine On
RewriteBase /test/

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

#dodaje slash na koncu
RewriteRule ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$ $1/ [NC,R=301,L]

第一个 RewriteRule 完美运行,它返回给我 $_GET['page']=130 。但是当涉及到第二个时,它返回给我 $_GET['page']=index.php 而不是 $_GET['page']=130$_GET['link']=35 。由于页面的数字 id,以 SQL 错误结束。

正常链接看起来像:
?page=136?page=136&link=35
改写一:
/136/ - 有效
/136/35/ - 不起作用,$_GET['page']=index.php

最佳答案

您可以用这个替换您当前的代码(您的 htaccess 必须在 test 文件夹中,对于 index.php 也是如此)

RewriteEngine On
RewriteBase /test/

# add trailing slash if no trailing slash and not an existing file/folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ $1/ [R=301,L]

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

你可以试试这些链接
  • http://domain.com/test/136/35/ 内部 重写为 index.php?page=136&link=35
  • http://domain.com/test/136/35 重定向到 http://domain.com/test/136/35/
  • http://domain.com/test/136/ 内部 重写为 index.php?page=136
  • http://domain.com/test/136 重定向到 http://domain.com/test/136/
  • 10-08 15:52