【问题标题】:Having trouble with a simple .htaccess redirect简单的 .htaccess 重定向遇到问题
【发布时间】:2011-04-03 19:01:11
【问题描述】:

我已经为此工作了一段时间,并尝试了很多我在网上看到的不同解决方案,但似乎无法让它发挥作用。

我在 www.mydomainname.com 上有一个站点。我要处理所有页面请求的页面是 www.mydomain.com/index.php。我还想将其设置为适用于我指向此代码库的任何其他域(我认为使用通配符将是可行的方法)。

因此以下 URL 类型(或任何其他类型)应自动转到 index.php,同时仍将原始 URL 结构保留在浏览器地址栏中:

 www.mydomain.com/
 mydomain.com/
 www.mydomain.com/item/111
 www.mydomain.com/item/itemname/anothervariable/value
 www.mydomain.com/item/itemname/?variable=value

我正在使用 PHP 5 和启用了 mod_rewrite 的最新版本的 Apache。

提前感谢您的帮助!

【问题讨论】:

标签: php apache url .htaccess redirect


【解决方案1】:

简单:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} !\.(jpg|gif|ico|png|bmp|css|js)$

RewriteRule .* index.php

【讨论】:

  • 这确实有效,但我确实忘记了一件事,对不起......内部链接,例如 CSS 文件、脚本文件、图像和包含的 PHP 文件(在特定目录中)等,会仍然需要正常运行——在我实施了这个解决方案之后,它们似乎并不存在。很抱歉没有意识到要提及这一点。
  • 如果你选中这个:stackoverflow.com/questions/3470040/help-writing-an-htaccess/…你不需要添加基于文件扩展名的例外。它检查文件或目录是否“物理地”存在于服务器上。如果没有,它将重定向到您的 index.php。在这个中,如果你添加一个 .swf 或 .pdf 文件,你将需要修改你的 .htaccess 文件。
  • 谢谢加布里埃尔,我也会检查一下。 :)
  • 加布里埃尔,RewriteCond %{REQUEST_FILENAME} !-f 不是已经这样做了吗?
【解决方案2】:

您可以使用以下 RewriteRule

RewriteEngine On
RewriteRule ^(.*)$ /index.php?originalUrl=$1

未经测试,但它应该可以工作。然后,您还将在 'originalUrl' GET 参数中获得原始 URL 以供进一步解析。

【讨论】:

    【解决方案3】:

    在每个 .htaccess 文件中包含一次:

    Options +FollowSymlinks
    RewriteEngine on
    
    RewriteRule (.*) index.php
    

    如果您需要来自匹配 URL 的信息,您可以修改您的 RewriteRule 以匹配旧 URL 的某些部分,或者使用变量 $1 等来包含所有内容。例如,如果您想快速将项目编号传递给 index.php,则可以使用以下规则:

    RewriteRule item/(.*)$ index.php?item=$1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多