【问题标题】:Keep URL the same, load index.php保持 URL 不变,加载 index.php
【发布时间】:2013-11-08 11:36:50
【问题描述】:

我的问题可能很愚蠢,但我用谷歌搜索并没有找到答案......

假设我想通过以下网址访问我的网站:www.mywebsite.com/something/something_else/?some_query_string=true (我放了查询字符串,因为它会在那里,我不知道它是否对htaccess文件有任何影响)

我希望它保持 URL 相同,但无论哪个 URL 都加载索引文件,它不在服务器的根目录中。 我的服务器有一个“应用程序”文件夹,所有代码都在其中。

我该怎么做?

谢谢!

【问题讨论】:

    标签: php .htaccess redirect


    【解决方案1】:

    使用 htaccess 重写所有对 index.php 的请求(除非文件/目录/链接被请求并且它存在):

    <IfModule mod_rewrite.c>
    
        Options +FollowSymLinks
        RewriteEngine on
    
        RewriteBase /
    
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-l
    
        RewriteRule .* index.php [L]
    
    </IfModule>
    

    【讨论】:

    • 天哪两个答案秒秒!哇!!
    • 这是人们一直在问的问题之一 :)
    • 其他人已经删除了他的答案,而你的答案和他的答案时间戳完全相同!! (10:52:38Z) 这就是我的意思!我相信,几乎真的不可能再发生了!
    【解决方案2】:

    如果您想使用 Rewrite 让您的请求由 DocumentRoot 外部的文件处理,那么您可以结合 Alias 指令。

    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    
    RewriteRule .* application/index.php [PT]
    
    
    Alias application /path/to/application
    

    注意 RewriteRule 上的 [PT] 表示 'pass through' - 它确保重写的 url 被传递到其他可能对处理它感兴趣的 apache 模块。

    【讨论】:

    • 谢谢!不知道这是可能的!
    【解决方案3】:

    原来这回答了我自己的问题:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ application/index.php?url=$1 [QSA,L]
    

    如果 URL 不存在,它会在文件夹“application”中加载 index.php 文件,并保持 URL 不变,这正是我所需要的......

    感谢您的回答!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多