合并两个.htaccess重写文件

时间:2013-01-04 20:49:55

标签: .htaccess rewrite

我有两个不同的.htaccess文件,每个文件都做不同的事情,当我将它们组合起来时,它们将无法一起工作。

第一个允许我输入www.mydoman.com/test并将其表示www.mydomain.com/index.php?page=test

RewriteRule    ^([A-Za-z0-9-_]+)/?$  index.php?subclass=$1 [NC,L]
RewriteRule    ^.* index.php [NC,L]

第二个文件切断了.html和.php文件的扩展名,因此可以使用www.mydo.com/cout的www.mydo.com/cout.abp

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteBase /cl_clone

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

# e.g. example.com/foo will display the contents of example.com/foo.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

有没有办法允许这两个在一个.htaccess文件中一起工作?

1 个答案:

答案 0 :(得分:1)

您在顶部有一个重定向规则,然后是两组规则,用于在请求结束时添加php或html扩展名(如果存在此类文件)。然后你的另一条规则为index.php做了路由。

你需要做的一些事情。在任何一种情况下,您都有重写基础/cl_clone,它似乎根本不起作用,因为您的网址在请求中没有cl_clone(例如它们只是{ {1}},没有cl_clone)。

所以你可能想删除它。

否则,您只需在其他规则的最底部添加www.mydomain.com/about路由规则即可。您可能需要添加额外的调整,可能:

index.php

或将RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?subclass=$1 [NC,L] RewriteCond %{REQUEST_URI} !index.php RewriteRule ^.* index.php [NC,L] 更改为RewriteBase /cl_clone