2010-10-31 116 views
0

我在Apache的mod_rewrite上遇到了一些麻烦。我试图让它做的一件事是隐藏我的一些实现细节,例如,用户看到URL http://www.mysite.com/login,但Apache用http://www.mysite.com/doc_root/login.php的页面响应(最好不显示用户它是一个PHP文件或目录结构)。下面是我在我的.htaccess文件:Apache mod_rewrite没有做任何事情(?)

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?mysite.com* 
RewriteRule ^/(\w+) /doc_root/$1.php [L] 

#Redirect http://www.mysite.com to the login page 
RewriteRule ^/?$ https://www.mysite.com/doc_root/login.php 

但是,当我去http://www.mysite.com/login,我得到即使页面中存在一个404错误。我显然没有很好的理解mod_rewrite条件和规则是如何工作的,所以任何人都可以告诉我我做错了什么?谢谢。

+0

我会打开RewriteLog并将RewriteLogLevel设置为某个高值。 – 2010-10-31 13:42:44

+0

你最好问这个在Serverfault.com – Bevor 2010-10-31 13:52:02

+0

无法打开RewriteLog - 托管服务不允许它。感谢指导我到serverfault.com,我以前不知道它。 – jay 2010-10-31 21:40:59

回答

0

doc_root取代你所有的东西。这会给你你要求的结果。不过,我不确定是否需要。如果你手动键入http://www.mysite.com/index.php,你将如何强迫某人登录?

此外,如果您尝试强制所有流量到SSL,最好使用第二个VirtualHost和Redirect而不是mod_rewrite。这些都是问题,可能更适合ServerFault

0
  • 除非你的网站有大量不同的域名,而你只 mysite.com做重写,你不需要的RewriteCond。 (潜在的问题,除非你设置了UseCanonicalName off,否则阿帕奇喜欢用这个域名混搭,如果名称不符合它的要求,重写将不会发生)
  • 在RewriteCond(和RewriteRule)模式中,.与任何字符。在他们之前添加一个反斜杠。 (小错误,不应该导致重写失败,但它们会匹配像“mysite-com”之类的东西。)
  • mod_rewrite实际上是一个URL到文件名过滤器。尽管通常用于重写URL到其他URL,但有时如果重写为URL并且无法识别,它有时会出现错误。 (尤其是如果重写为别名,或者不会直接翻译为真实文件名)。但是,如果向规则中添加[PT]标志,它会将重写的东西视为URL并将其传递到其他过滤器(包括将URL转换为文件名的过滤器)。
  • 你真的需要“/ doc_root”吗?文档根目录应该已经在Apache中使用DocumentRoot指令设置,并且不应该需要成为URL的一部分,除非您在同一个域中有多个应用程序(在这种情况下,它是应用程序根目录;文档根目录不更改)。

UPDATE:

  • 我只是想另一件事:重写规则.htaccess文件的工作方式不同。阿帕奇喜欢剥离主要的斜线。所以你可能会想要摆脱你模式中的第一个斜线,或者至少让它成为可选项(^/?login而不是^/login)。
  • ^/?(\w+)将匹配/doc_root/login.php,并导致重写到/doc_root/doc_root.php。你应该在你的模式结束时有一个$。
+0

我仍然困惑,但我认为这是有帮助的。我摆脱了RewriteCond指令,因为(现在)我只有一个我正在使用的域。根据mod_rewrite是URL到文件名过滤器:我希望服务器响应的文件位于“/home2/interag6/public_html/doc_root/login.php”。这是否意味着我的指令应该是“RewriteRule ^/login /home2/interag6/public_html/doc_root/login.php”? – jay 2010-10-31 21:36:33

+0

你应该可以做到这一点。虽然如果你这样做,你可以使用'%{DOCUMENT_ROOT}/doc_root/login.php'来代替。但在你做了太多事情之前,看看更新 - 我已经习惯于完全访问服务器,我没有考虑.htaccess的特性。 – cHao 2010-10-31 22:26:26