我正在使用此规则重写链接
RewriteEngine On
RewriteRule ^(.*)/(.*) show_cv.php?email=$1
如果我用最后一个斜杠写这个url
,它工作得很好www.mysite.com/letschat_2008@yahoo.com/ ----> index.php?email=letschat_2008@yahoo.com
但是当我从链接www.mysite.com/letschat_2008@yahoo.com/
中删除最后一个斜杠时,它会显示错误404。
我希望网址重写规则适用于斜杠和不带斜杠(/
)
www.mysite.com/letschat_2008@yahoo.com/ ----> index.php?email=letschat_2008@yahoo.com
www.mysite.com/letschat_2008@yahoo.com ----> index.php?email=letschat_2008@yahoo.com
答案 0 :(得分:1)
您的规则正在循环,您需要确保重写电子邮件地址,并添加一些条件,以便在访问现有资源时不会应用规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_\-\@\.]+)/?$ /show_cv.php?email=$1 [L]
答案 1 :(得分:0)
然后您应该使用以下规则:
RewriteRule ^(.*)/? show_cv.php?email=$1
答案 2 :(得分:0)
我假设你在.htaccess文件中注意到这些规则,而不是在查看描述时在服务器配置中注意到这些规则?
如果您不想将其置于服务器配置中,请反思。除了使用.htaccess文件之外,使用这些文件中的重写规则更难调试,这比使用服务器配置更复杂。这在mod_rewrites文档中有记录。
行为的原因是两种情况下REQUEST_URI的内容不同。试试看,直接检查,你就会发现问题。在案例2(无“/”)中,整个部分“letschat_2008@yahoo.com”在该变量中丢失。要使其工作,您必须使用额外的rewriteCondition(也记录...)。像这些未经测试的线条:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.+)&
RewriteRule - show_cv.php?email=%1
(注意'%'而不是最后一行的'$')