我的htaccess重写有问题。
该行是:
RewriteRule ^sports/([^/\]+)/?([^/\]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1&go=$2&d=$3 [L]
此网址:http://localhost/host/sports/other/
- >它会导致:
***object(url)[3]
public 'v' => string 'sports' (length=6)
public 'title' => string 'other' (length=5)*** ( these are the var_dump of Gets);
到目前为止,对于这个网址,这个网址的所有细节都很好: http://localhost/host/sports/baseball/aliasss/ 它会导致:404找不到,我必须修改正则表达式并添加'。'这样:
RewriteRule ^sports/([^/\]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1&go=$2&d=$3 [L]
它工作正常。但如果我保留点,并检查旧网址,只有2个文件夹,它将导致:
object(url)[3]
public 'v' => string 'sports' (length=6)
public 'title' => string 'basebal' (length=7)
public 'go' => string 'l' (length=1)
如果您看到链接是/sports/basebal/l
而不是/sports/baseball
,则查询中缺少1个字母,HELP!
谢谢:))
在我添加两行n两种情况后,它工作正常:
RewriteRule ^sports/([^/\]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1 [L]
RewriteRule ^sports/([^/\]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1&go=$2&d=$3 [L]
但我不认为这是正确的方法,这意味着如果我想要另一个级别,我必须添加另一行... humph
答案 0 :(得分:1)
在你的情况下,我想我会用这个:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^sport/(.*?)/(.*?)/(.*?)/$ test.php?v=sport&a=$1&b=$2&c=$3
但通常我更喜欢
RewriteRule (.*) index.php?get=$1
然后使用php
在你的代码中,你犯了一些错误,比如[^/\]+
....通常你必须像我上面提到的那样用向后的斜线来逃避正斜杠,
在这种情况下[^\/.]+
您不需要点,因为[^\/]
表达式匹配除正斜杠之外的任何内容
你不需要/?
(可选正斜杠),因为它们之间的文字不是可选的,你可能会得到整个网址为$1
....也许只是最后一个是有用