【问题标题】:Rewrite everything to be after index.php/将所有内容重写为 index.php/ 之后
【发布时间】:2011-07-05 23:27:53
【问题描述】:

我正在设置一个 php mvc 框架,我想将域之后的任何内容重定向到 index.php/$1,但它不起作用。我启用了 rewrite_module 和 AllowOverride All,还有什么我遗漏的吗?

基本上我希望 url 从这个 http://www.example.com/foo/bar 转到 http://www.example.com/index.php/foo/bar 以便我可以从 $_SERVER['PATH_INFO'] 获取它

这就是我所拥有的......

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]

httpd-vhosts.conf

NameVirtualHost *:80

<VirtualHost *:80>
  DocumentRoot c:/wamp/www
  ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "c:/websites/snugglemvc"
    ServerName www.snugglemvc.com
    <Directory "c:/websites/snugglemvc">
        Order Deny,Allow
        Allow from all
        AllowOverride all
    </Directory>
</VirtualHost>

【问题讨论】:

    标签: mod-rewrite pathinfo


    【解决方案1】:

    我相信您需要 /index.php 上的前导斜杠,因为您的正则表达式匹配行首。

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php/$1 [L]
    

    【讨论】:

    • @bflemi 规则很好,效果很好。如果它对您不起作用,那么您会得到什么,一个错误?尝试暂时放置[R=302,L] 以查看规则是否真正起作用(发生重定向)。
    • @LazyOne 谢谢,我回家后会尝试并告诉你。当我去 www.example.com/foo/bar 我得到一个 404,但是当我去 www.example.com/index.php/foo/bar 然后它工作正常。我想那是因为那时不需要重写并且设置了 PATH_INFO。
    • @LazyOne 不,这也不起作用。我认为 mod_rewrite 不起作用。
    • @LazyOne 对不起,应该更具体,它在我的本地。我将使用我的 httpd-vhosts 编辑上面的帖子。此外,如果我向 .htaccess 添加非法命令,例如“hello”,它不会抛出 500。
    • @LazyOne 另外,上面的 .htaccess 是完整文件。我现在已经摆脱了一切,只是为了解决问题。顺便感谢您的帮助!
    【解决方案2】:

    这是我的 httpd.conf 文件的问题。我在本地主机上没有 AllowOverride all。一旦我改变了一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2012-07-22
      • 1970-01-01
      • 2011-12-30
      • 2011-08-27
      相关资源
      最近更新 更多