htaccess的重写URL错误页和ID

问题描述:

我想实现像mydomain.com/anyword以下htaccess的重写URL错误页和ID

  1. 的任何链接应该重写的index.php?PG = $ 1

例子:

​​
  1. 任何链接mydomain.com/anyword/anynumber应该被重写到index.php PG 1 & = $ ID = $ 16
  2. 例如:

    mydomain.com/new/12 -->index.php?pg=new&id=12 
    
    mydomain.com/purchased/240 -->index.php?pg=purchased&id=240 
    
    mydomain.com/login/10 -->index.php?pg=login&id=10 
    

    我已经使用以下htaccess的代码。 第一个正常工作。 关于第二个参数,整个参数传递给pg,根本没有参数id。

    也就是说在URL mydomain.com/purchased/240 的情况下,在我的PHP $ _Get具有在所有 只有 'PG' 参数 'ID' 参数和PG = /购买/ 240

    请建议正确的方法来做到这一点。

    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php?pg=$1 [NC,QSA] 
    RewriteRule ^([^/]+)/(\d+)/.*$ /index.php?pg=$1&id=$2 [NC,QSA] 
    

    感谢

    编辑:万一有人正确的解决方案做出需要

    Options +FollowSymLinks 
    RewriteEngine on 
    
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([A-Za-z0-9-]+)/([0-9]+) /index.php?pg=$1&id=$2 [NC,L,QSA] 
    
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php?pg=$1 [NC,QSA] 
    
开始=>
+0

你会得到什么错误? – starkeen

+0

这个问题似乎与HTA没有任何关系? – Teemu

+0

@Teemu - 为什么不呢?重写规则中有一些错误。我也尝试过其他规则。它不工作。 –

这是因为包罗万象的格局。 (。*)匹配所有内容并将其重写为目标。对于您的示例,您的第一条规则将/foobar//foobar/123这两个请求都重写为/index.php?pg=request。要解决这个问题,你需要修正你的规则的顺序,你需要把你的具体规则放在捉襟见肘的规则之前:

RewriteRule ^([^/]+)/(\d+)/?$ /index.php?pg=$1&id=$2 [L] 
RewriteRule ((?!index.php).+) /index.php?pg=$1 [L] 
+0

在这种情况下,我收到以下错误:内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请联系服务器管理员[email protected]并告知他们错误发生的时间以及您可能已经犯的任何可能导致错误的事情。 有关此错误的更多信息可能在服务器错误日志中可用。 此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误错误。 –

+0

好的,我认为错误是由于相同的模式和目标。我已经排除了规则模式中的目标路径。尝试更新的规则。 – starkeen

+0

对不起。得到相同的内部错误。但是,如果我删除特定规则的第一种类型的网址 - 一般重写工程。我认为在具体规则中有一些错误。 –