2013-02-10 157 views
0

我试图重写一些参数,以美丽的链接,但一个子域/一个文件夹只有。不幸的是我无法得到它的工作,也许还因为有前行一些其他的重写......htaccess只为子域重写

继承人我的代码:

<IfModule mod_rewrite.c> 
# NON-WWW TO WWW 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example.com 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

# WORDPRESS-BLOG 
Options +FollowSymlinks 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

# REDIRECT FOR SUBDOMAIN 
RewriteCond %{HTTP_HOST} ^subdomain.example.com 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/.]+)(?:/)?$ index.php?cshort=$1 [L] 
RewriteRule ^([^/.]+)/([^/.]+)(?:/)?$ /index.php?cshort=$1&cid=$2 [L] 
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)(?:/.*)?$ /index.php?cshort=$1&cid=$2&step=$3 [L] 
</IfModule> 

基本上只有最后一个部分是一个我想重写从类似

http://subdomain.example.com/index.php?cshort=abc&cid=123&step=1更改URL来http://subdomain.example.com/abc/123/1

www.example.com的其他重写规则不应该受到影响。不幸的是,我现在的代码只能完成博客和www的前两条规则,但在子域上没有任何反应。我的代码有什么问题?

回答

1

当你说你想从http://subdomain.example.com/index.php?cshort=abc&cid=123&step=1改写为http://subdomain.example.com/abc/123/1你的意思是你希望用户输入漂亮的URL并让它在后台提供完整的URL,而不是你想从丑陋重定向到漂亮的网址,对吧?

在你的RewriteRules中,你想用“(?:/)?”完成什么?正如所写,这对我没有任何意义。如果你只是想匹配的目录路径是否与斜线结尾,你可以做如下:

RewriteRule ^([^/.]+)/?$ index.php?cshort=$1 [L] 

编辑:补充建议:

  1. 移动“的重定向子网域“部分上方的”子网域“部分。由于Wordpress规则适用于“所有不是真正的文件或目录,不管域名”应该最后。

  2. RewriteConds仅适用于跟在它们后面的单个RewriteRule。对于您在“子域重定向”下列出的三个规则中的每一个,在根据上述建议更新它们之后,您需要重复RewriteRule前面的两条RewriteCond行。

+0

是啊,我当然希望他们的用户输入URL漂亮......对于任何建议,因为即使你改正它没有做任何事情:( – Anonymous 2013-02-11 16:55:48

+0

增加了几个有关规则顺序和使用更多的建议RewriteConds。 – 2013-02-11 18:19:08