0

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

这是我的代码:

<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 做了前两个规则,但子域没有任何反应。我的代码有什么问题?

4

1 回答 1

1

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

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

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

编辑:其他建议:

  1. 将“重定向子域”部分移到“Wordpress 博客”部分上方。由于 Wordpress 规则适用于“所有不是真实文件或目录的内容,无论域如何”,因此应该放在最后。

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

于 2013-02-10T17:43:04.617 回答