2012-07-31 263 views
1

我使用这个规则重写链路URL重写规则

RewriteEngine On 
RewriteRule ^(.*)/(.*) show_cv.php?email=$1 

,如果我写这篇文章的网址与去年斜线

www.mysite.com/[email protected]/ ----> [email protected] 

但是当它工作正常状我从链接www.mysite.com/[email protected]/删除最后一个斜杠它显示错误404.

我希望URL重写规则适用于斜杠和没有斜杠(/

www.mysite.com/[email protected]/ ----> [email protected] 
www.mysite.com/[email protected] ----> [email protected] 

回答

0

,那么你应该使用以下规则:

RewriteRule ^(.*)/? show_cv.php?email=$1 
+0

嗯,我已经使用这个规则,但在show_cv.php我没有得到“[email protected]”值在查询字符串中,我在查询字符串中获得“show_cv.php”值。 – DEVESH 2012-07-31 16:45:56

0

我假设你在.htaccess文件注意这些规则,而不是在服务器配置看你的描述是什么时候?

重新思考如果你不想把它放到服务器配置中。除了使用.htaccess文件难以在这些文件中使用重写规则调试比在服务器配置中更复杂之外。这在mod_rewrites文档中有记录。

行为的原因是在这两种情况下REQUEST_URI的内容不同。尝试直接检查,你会看到问题。整个部分“[email protected]”在情况2(no“/”)中只是在该变量中丢失。为了得到这个工作,你必须使用额外的rewriteCondition(也记录了......)。像这些未经测试的线路:

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/(.+)& 
RewriteRule - show_cv.php?email=%1 

(注意是“%”,而不是在最后一行“$”)的

+0

当我把这条线RewriteCondition%{REQUEST_URI}^/(。+)&这一行我得到错误“内部服务器错误” – DEVESH 2012-07-31 16:51:15

+0

对不起,正如所提到的行未经测试,我从内存中写道。你将不得不尝试一下,但这种方法的作品。它是'RewriteCond',而不是'RewriteCondition'。 – arkascha 2012-07-31 16:54:28

1

你的规则是循环的,你需要确保你重写的电子邮件地址,并添加一些条件,使该规则不应用如果它的访问现有的资源:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([A-Za-z0-9_\-\@\.]+)/?$ /show_cv.php?email=$1 [L] 
+0

非常感谢您的工作正常... – DEVESH 2012-08-01 05:28:25

+0

@DEVESH接受答案,以便您的问题不会显示在未回答的问题列表中 – 2012-08-01 05:49:20