如何获得两个htaccess重写规则以“一起玩得很好”?

时间:2011-07-02 21:16:15

标签: .htaccess mod-rewrite

在我的网站根目录中,我有以下内容重定向到非www域

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^www\.notails\.com [NC]
RewriteRule ^(.*)$ http://notails.com/$1 [R=301,NC]

在一个名为'photography'的子文件夹中,我有这个......

RewriteEngine on
RewriteRule ^show/([^/\.]+)/([^/]+)$ show.php?section=$1&photoid=$2 [L]

摄影文件夹中的任何内容都会忽略www删除规则。如何将两个这两个规则应用于摄影文件夹中的文件夹/文件?

另外......我的root htaccess文件有这个......

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

# END WordPress

它会干扰吗?我有一个自我托管的wordpress博客,但它不在网站的根目录,它位于一个名为“博客”的子文件夹中,所以我不知道为什么这个规则在我的root的htaccess文件中。可以/我应该移动吗?

编辑:只是指出,如果不是很明显 - 当涉及到htaccess和mod_rewrite时,我就是一个完整的菜鸟。子文件夹中的htaccess文件是否覆盖了比它更接近根的任何htaccess文件?或者htaccess内容是否合并?

编辑2 :我已尝试将第二条规则移至与www删除规则相同的htaccess文件,具体如下代码所示......

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

# END WordPress

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^www\.notails\.com [NC]
RewriteRule ^(.*)$ http://notails.com/$1 [R=301,NC]
RewriteRule ^photography/show/([^/\.]+)/([^/]+)$ photography/show.php?section=$1&photoid=$2 [L]

如果我转到我的一个摄影页面,它会解析为预定的网址(例如http://notails.com/photography/show/pointofayre/260),但页面是404.

如果我手动将'www'添加到撤消其他规则...(http://notails.com/show.php?section=pointofayre&photoid=260)并删除'摄影/'来自它。

1 个答案:

答案 0 :(得分:3)

RewriteOptions inherit添加到“photography”文件夹中的.htaccess中,因为现在忽略来自父文件夹的所有重写规则(默认行为)。

或者将重写规则从该子文件夹.htaccess移动到根目录(您需要通过修复路径稍微修改您的规则 - 添加photography/可能就足够了,取决于实际的“摄影”位置)


<强>更新 你的根.htaccess可以是这样的:

Options +FollowSymlinks

<IfModule mod_rewrite.c>
    # activate rewrite engine
    RewriteEngine On
    # we are in the root
    RewriteBase /

    # no www please
    RewriteCond %{HTTP_HOST} ^www\.notails\.com [NC]
    RewriteRule ^(.*)$ http://notails.com/$1 [R=301,L,QSA]

    # photography
    RewriteRule ^photography/show/([^/\.]+)/([^/]+)$ /photography/show.php?section=$1&photoid=$2 [L]

    # WordPress rules
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
相关问题