0

我正在尝试将旧设计 ( www.your-translations.com ) 永久重定向到 www.your-translations.com/_YT 上的新设计

在此过程中,网址必须从这种格式更改:

www.your-translations.com/my_page.php _

到这种格式:

www.your-translations.com/_YT/index.php?pge=my_page _

到目前为止,我已经做了很多尝试,最近的一次是:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST}    ^.*your\-translations.com.*$    [NC] 
RewriteRule ^(.*?)/([^/]*)\.php $1/_YT/index.php?pge=$2 [R=302]
RewriteCond %{HTTP_HOST} ^your-translations.com [NC] 
RewriteRule ^(.*)$ http://www.your-translations.com/$1 [R=302,L]

这是我最好的尝试之一,因为它显然几乎什么都不做(以前的尝试导致 505 错误和无限循环)。将 URL 重写为“www”。工作正常。

我已经在不同的正则表达式测试器中测试了正则表达式,它似乎做了我期望它做的事情。

有人可以解释我做错了什么吗?

  1. 该模式到底适用于什么?是 RewriteCond 匹配的吗?我输入的URI?相对路径?服务器上的实际路径?

在我尝试匹配之前有什么方法可以显示字符串?

  1. 教程中的一些建议会导致我的服务器出现无限循环。所有版本的工作方式都相同吗?

不幸的是,虚拟主机技术支持似乎对 mod_rewrite 一无所知,所以我不能指望他们提供任何帮助。

根据我的 FTP 日志,我已经进行了大约 80 次尝试,在这里我真的可以用一只手。

4

2 回答 2

1
Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^your-translations\.com$
RewriteCond %{REQUEST_URI} !^/_YT/([a-z0-9-_]+)\.php$
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)\.php$
RewriteRule ^(.*) /_YT/index.php?pge=%1 [QSA]

RewriteCond %{HTTP_HOST} ^www\.your-translations\.com$
RewriteCond %{REQUEST_URI} !^/_YT/([a-z0-9-_]+)\.php$
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)\.php$
RewriteRule ^(.*) /_YT/index.php?pge=%1 [QSA]

在 RewriteCond 中,您必须在点之前而不是破折号之前键入反斜杠,因为 .htaccess 中的点表示任何字符,因此您需要 bslash 调用 is as dot。对不起,我在移动,所以我无法解释更多,但请随时询问您想了解的代码。

于 2013-04-02T15:18:39.737 回答
0

感谢webmasterworld的一些解释,我能够修复我的 mod_rewrite 代码:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^your-translations.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.your-translations.com [NC]
RewriteCond %{REQUEST_URI} !="^.*?/.*" 
RewriteRule ^([^/]*)\.php$ http://www.your-translations.com/_YT/index.php?pge=$1 [R=302,L]
RewriteRule ^$ http://www.your-translations.com/_YT/ [R=302,L]

到目前为止,这似乎工作正常(触摸木头)。感谢仆人的帮助。

于 2013-04-03T07:19:04.723 回答