无法使用.htaccess创建干净的网址

时间:2014-08-28 13:12:27

标签: .htaccess mod-rewrite

我提供了这个.htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.lebmotors.com/new/
RewriteRule (.*) http://www.lebmotors.com/new/$1 [R=301,L]
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ moreprod.php?id=$1 
RewriteRule ^([a-zA-Z0-9_-]+)/$ moreprod.php?id=$1
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ moreprod.php?id=$1&topid=$2 
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ moreprod.php?id=$1&topid=$2

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ moreprod.php?id=$1&topid=$2&catid=$3 
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ moreprod.php?id=$1&topid=$2&catid=$3

仍然不起作用 我明白了:http://www.lebmotors.com/new/moreprod.php?id=107&topid=4&catid=8 我究竟做错了什么 非常感谢

2 个答案:

答案 0 :(得分:0)

首先,您不需要重复RewriteEngine On指令。

然后,当您添加规则时,您仍然可以通过moreprod.php访问您的网页(但您也可以通过新的干净网址访问它)。

假设moreprod.php也位于new文件夹

,这就是你的htaccess的样子
Options -MultiViews

RewriteEngine On
RewriteBase /new/

RewriteCond %{THE_REQUEST} /moreprod\.php\?id=([^&\s]+)\s [NC]
RewriteRule . moreprod/%1/? [R=301,L]

RewriteCond %{THE_REQUEST} /moreprod\.php\?id=([^&\s]+)&topid=([^&\s]+)\s [NC]
RewriteRule . moreprod/%1/%2/? [R=301,L]

RewriteCond %{THE_REQUEST} /moreprod\.php\?id=([^&\s]+)&topid=([^&\s]+)&catid=([^&\s]+)\s [NC]
RewriteRule . moreprod/%1/%2/%3/? [R=301,L]

RewriteCond %{THE_REQUEST} /morenews\.php\?id=([^&\s]+)\s [NC]
RewriteRule . morenews/%1/? [R=301,L]

RewriteRule ^morenews/([^/]+)/$ morenews.php?id=$1 [L]
RewriteRule ^moreprod/([^/]+)/$ moreprod.php?id=$1 [L]
RewriteRule ^moreprod/([^/]+)/([^/]+)/$ moreprod.php?id=$1&topid=$2 [L]
RewriteRule ^moreprod/([^/]+)/([^/]+)/([^/]+)/$ moreprod.php?id=$1&topid=$2&catid=$3 [L]

使用此代码,如果您尝试(例如)到达http://domain.com/new/moreprod.php?id=123&topid=456&catid=789,那么您将重定向到http://domain.com/new/moreprod/123/456/789/

<强>结论
您现在可以通过干净的网址访问您的网页,例如

  • http://domain.com/new/moreprod/123/(id = 123)
  • http://domain.com/new/moreprod/123/456/(id = 123 and topid = 456)
  • http://domain.com/new/moreprod/123/456/789/(id = 123 and topid = 456 and catid = 789)

答案 1 :(得分:0)

已解决,只需将这些行移至.htaccess

的底部
        RewriteEngine On
        RewriteBase /new/
        ....
        RewriteCond %{THE_REQUEST} /moreprod\.php\?id=([^&\s]+)\s [NC]
        RewriteRule . moreprod/%1/? [R=301,L]
        .....
        RewriteCond %{THE_REQUEST} /moreprod\.php\?id=([^&\s]+)&topid=([^&\s]+)&catid=([^&\s]+)&cagid=([^&\s]+)\s [NC]
        RewriteRule . moreprod/%1/%2/%3/%4/? [R=301,L]
        RewriteRule ^moreprod/([^/]+)/$ moreprod.php?id=$1 [L]
        .....
        RewriteRule ^moreprod/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ moreprod.php?id=$1&topid=$2&catid=$3&cagid=$4 [L]
        # THIS TO THE BOTTOM
        RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
        RewriteRule ^ %1 [R,L]
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME}.php -f
        RewriteRule ^(.*?)/?$ $1.php [L]
相关问题