Apache重写自定义规则文件

时间:2014-11-18 17:32:07

标签: apache .htaccess url mod-rewrite

我有一台托管网站的服务器。它使用"漂亮的链接"。我在尝试在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文件目前正在链接回索引文件,这就是为什么它不起作用,但我尝试了其他方法,如下所示。


ATTEMPT 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>

ATTEMPT 2

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

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

1 个答案:

答案 0 :(得分: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 /