默认.htaccess文件中的url重定向

时间:2013-09-03 08:16:43

标签: .htaccess mod-rewrite pyrocms

我想将“http://www.example.com/abc”映射到“http://www.example.com/test/abc”以获得最短的路线。我正在为我的用户和内容使用pyroCMS 默认的pyrocms文件:

# Multiple Environment config  
# Set this to development, staging or production  
# SetEnv PYRO_ENV production  

<IfModule mod_rewrite.c>

    # Make sure directory listing is disabled
    Options +FollowSymLinks -Indexes
    # disable the Apache MultiViews directive if it is enabled on the server. It plays havoc with URL rewriting
    Options -MultiViews
    RewriteEngine on

    # Keep people out of codeigniter directory and Git/Mercurial data
    RedirectMatch 403 ^/.*/(vendor|composer\.json|composer\.lock|system/cms/cache|system/codeigniter|system/cms/config|system/cms/logs|\.git|\.hg).*$

    # Send request via index.php (again, not if its a real file or folder)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    <IfModule mod_php5.c>
        RewriteRule ^(.*)$ index.php/$1 [L]
    </IfModule>

    <IfModule !mod_php5.c>
        RewriteRule ^(.*)$ index.php?/$1 [L]
    </IfModule>

</IfModule>

我想将此规则添加到文件中:

RewriteRule ^([a-z0-9_]+)$ test/$1

将“BASE_URL/abc”重写为“BASE_URL/test/abc

然而,

我尝试了很多关于在哪里放置这个RewriteRule的立场,我的网站不断给出“Page Missing”。

我的RewriteRule好吗?我在哪里插入它?

2 个答案:

答案 0 :(得分:1)

PyroCMS具有内置的模块化路由功能。看到这里:

http://docs.pyrocms.com/2.2/manual/developers/basics/modular-routing

如果您的“http://www.example.com/abc”指的是自定义模块,则可以在模块的配置文件夹中添加名为“routes.php”的文件。 文件夹结构应该是这样的:

addones/shared_addons/modules/your-module/config/routes.php

或者您甚至可以编辑位于config的核心路径system/cms/config/routes.php文件,并添加此行或您的路由规则:

$route['abd'] = 'test/abd';

或者更甚至,在您的控制面板上有一个重定向模块,您可以添加重定向。

答案 1 :(得分:0)

这完全取决于您的规则应该做什么以及它应该如何与您网站的其他部分进行交互(或不交互)。考虑到你的整个htaccess文件主要是注释掉的代码(我删除它以使其中途可读),你只想将它放在RewriteEngine On下。

然而,由于它盲目地将所有内容都路由到test,你需要添加一些条件并使其成为lilke:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/test%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/test%{REQUEST_URI} -d
RewriteRule ^([a-z0-9_]+)$ test/$1 [L]