【问题标题】:Apache Rewrite custom rules fileApache 重写自定义规则文件
【发布时间】:2015-01-16 00:00:53
【问题描述】:

我设置了一个服务器来托管一个网站。它使用“漂亮的链接”。尝试在 htaccess 文件中创建规则时遇到问题。

在我继续之前,我想参考一下我用来尽量减少混淆的位置

  • wwww/ wwww 是我所有文件夹内容所在的站点,它位于 wamp 创建的 www 文件夹中

  • page.php 包含我想以某种方式实现的规则,它位于我网站的根目录中

目前我的网站会生成如下链接,但这些链接不起作用: www.MYDOMAIN.co.uk/our-services

上面的链接不起作用,但如果我手动编辑链接并执行此操作,它会起作用: www.MYDOMAIN.co.uk/page.php?q=our-services

我需要找到一种方法在 htaccess 文件中实现这一点并让它添加page.php?q=

下面是我的 htaccess 文件

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . wwww/index.php [L]
</IfModule>

我遇到的问题是在我的主页上生成导航,如果我点击我们服务的链接,它会重定向到页面www.MYDOMAIN.co.uk/our-services

我需要它做的是点击我的规则文件,该文件位于我的根目录中,名为 page.php,该文件又将使用 our-services 或任何可能的查询来为其提供正确的链接

我知道我的 htaccess 文件当前正在链接回索引文件,这就是它无法正常工作的原因,但我尝试了其他方法,如下所示。


尝试 1 - 这只是 404 或将我带到空白页

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . wwww/page.php?q=$1 [L]
</IfModule>

尝试 2

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .? /page.php?$1 [L]
</IfModule>

我的其他尝试都相似,我得到相同的 404 或空白屏幕。这是我第一次接触重写链接,这说明我对此缺乏了解。

【问题讨论】:

  • 你的DocumentRoot 是什么? page.php 在哪里,wwww 在哪里?
  • @anubhava 在我的根目录 www 文件夹中我有另一个名为 wwww 的文件夹,其中包含我所有的网站内容 css javascript 等,page.php 位于 wwww 的根目录中,与我的索引所在的文件夹相同和 htaccess :)
  • 那么如何访问/wwww/里面的css文件呢?例如是www.MYDOMAIN.co.uk/wwww/css/style.css
  • 我只在本地托管,所以现在它会进入www/wwww/css/style.css

标签: apache .htaccess url mod-rewrite


【解决方案1】:

好的,试试/wwww/.htaccess的这条规则:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /wwww/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)$ page.php?q=$1 [L,QSA]
</IfModule>

如果/wwww/ 确实是您的DocumentRoot,则将RewriteBase 行更改为:

RewriteBase /

【讨论】:

  • 嗨,他似乎可以工作,但我的一些页面无法使用它,因为它们是静态的,有没有办法为已经有 .php 扩展程序的页面排除这种重写?
  • 似乎工作正常,非常感谢我很难理解这一点:) 请您为我解释一下吗?
  • 2 个条件将跳过任何真实文件/目录进行重写,^([^.]+)$ 将匹配任何没有 DOT 的请求。它将重写为page.php?q=&lt;uri&gt;RewriteBaseDocumentRoot 设置当前相对目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2011-10-26
相关资源
最近更新 更多