0

我做了几次尝试都没有成功。这就是我想要为“静态动态网址”所做的事情:

index.php?content=authors   => /compositori/
index.php?content=albums    => /dischi/

查询字符串变量值“authors”需要变为“compositori”,我已经尝试过,但没有:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^compositori/$ index.php?content=authors - [R=301,L]
</IfModule>

这适用于动态网址:

index.php?content=author&c=nome-compositore => /nome-compositore/
index.php?content=author&c=nome-compositore&action=view-bio => /nome-compositore/biografia/
index.php?content=author&c=nome-compositore&action=view-albums  => /nome-compositore/dischi/
index.php?content=author&c=nome-compositore&action=view-album&a=nome-disco  => /nome-compositore/nome-disco/

然后我想将此网址“index.php?content=index”重定向到主页,没有任何查询字符串参数,.com, index.php?content=index => www.mydomain.com

对于所有这些规则,我还需要使它们在 htaccess 位于此子文件夹中的子文件夹上工作,例如 mydomain.com/test/。尝试使用 RewriteBase 但没有:/

提前致谢

编辑:感谢大卫,现在我有了这些规则:

RewriteRule ^/?$ /subfolder/index.php?content=index [L]
RewriteRule ^contatti/$ /subfolder/index.php?content=contacts [L]
RewriteRule ^compositori/$ /subfolder/index.php?content=authors [L]
RewriteRule ^dischi/$ /subfolder/index.php?content=albums [L]
RewriteRule ^(.+)/biografia/$ /subfolder/index.php?content=author&c=$1&action=view-bio [L]
RewriteRule ^(.+)/dischi/$ /subfolder/index.php?content=author&c=$1&action=view-albums [L]
RewriteRule ^(.+)/(.+)/$ /subfolder/index.php?content=author&c=$1&action=view-album&a=$2 [L]

但我注意到,如果我在 url 中放入未重写的查询字符串 (index.php?content=authors),它会加载内容但保留非格式化的字符串,而不是重定向到重写的 url。我试图输入 [R=301,L] 但无事可做。这是我的最后一期。

再次感谢

4

1 回答 1

0

RewriteRule ^compositori/$ index.php?content=authors - [R=301,L]

这是无效的,原因有两个:您有规则的三个区域而不是必需的两个区域(-最后是额外的),并且您缺少前导斜杠。您也将其设置为重定向 ( R=301),但可能只是想重写。这应该改为:

RewriteRule ^compositori/$ /index.php?content=authors [L]

一旦你开始工作,你发布的剩余转化应该同样工作。

然后我想将此网址“index.php?content=index”重定向到主页,没有任何查询字符串参数,.com, index.php?content=index => www.mydomain.com

您使用的是“重定向”一词,但根据您之前示例中箭头的方向,您可能指的是相反方向的“重写”,所以这是两种方式的答案:

让用户输入www.mydomain.com并让服务器实际加载index.php?content=index(我认为你的真正意思):

RewriteRule ^/?$ /index.php?content=index [L]

真正有index.php?content=index重定向到www.mydomain.com

RewriteCond %{QUERY_STRING} ^content=index$
RewriteRule ^index.php$ http://www.mydomain.com/ [R=301,L]

编辑:关于将带有查询字符串的完整路径重定向到“漂亮”URL的最后一个问题,您将为每个特定的重写实现我在上面写的内容(RewriteCond + RewriteRule),并将规则放在现有的(新规则。换句话说:

RewriteCond %{QUERY_STRING} ^content=index$
RewriteRule ^subfolder/index.php$ http://www.mydomain.com/ [R=301,L]

RewriteCond %{QUERY_STRING} ^content=contacts$
RewriteRule ^subfolder/index.php$ http://www.mydomain.com/contatti/ [R=301,L]

... repeat for remaining rules

RewriteRule ^/?$ /subfolder/index.php?content=index [L]
RewriteRule ^contatti/?$ /subfolder/index.php?content=contacts [L]

... repeat for remaining rules

这会导致每个带有查询字符串的完整 URL 被重定向到漂亮 URL,然后漂亮 URL 被静默地重写为完整 URL。关于您上面列出的新规则的几点说明:

首先,您向原始问题中不存在的每个规则添加了一个 /subfolder。万一您希望规则在有或没有子文件夹的情况下应用,您可以将该部分添加到括号中,并在末尾添加一个问号,例如:

RewriteRule ^(subfolder/)?index.php$ http://www.mydomain.com/ [R=301,L]

此外,您编写的新规则要求匹配路径以斜杠结尾。由于以斜杠结尾或不以斜杠结尾的目录路径是等效的,因此您应该通过在斜杠之后添加问号来使其成为可选,就像我在上面的示例中所做的一样 ( contatti/?):

于 2013-02-03T00:18:09.300 回答