htaccess仅为子域重写

时间:2013-02-10 13:09:20

标签: .htaccess rewrite

我正在尝试将一些参数重写为漂亮的链接,但是对于子域/文件夹。不幸的是我无法让它工作,也许是因为之前还有一些其他的重写......

继承我的代码:

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

基本上只有最后一部分是我要重写的部分,用于更改

之类的URL

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

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

1 个答案:

答案 0 :(得分: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博客”部分上方移动“子域重定向”部分。由于Wordpress规则适用于“不属于真实文件或目录的所有内容,无论域名”应该是最后的。

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