根目录的.htaccess中的URL重写规则

时间:2012-07-31 16:37:13

标签: php .htaccess

我正在使用此规则重写链接

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

3 个答案:

答案 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

(注意'%'而不是最后一行的'$')