mod_rewrite导致500服务器错误/失败/部分工作

时间:2013-04-02 13:53:31

标签: .htaccess mod-rewrite

我正在尝试从我的旧设计(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是什么?相对路径?服务器上的实际路径?
  2. 在尝试匹配之前有没有办法显示字符串?

    1. 教程中的一些建议导致我的服务器上出现无限循环。所有版本的工作方式是否相同?
    2. 不幸的是,webhost技术支持似乎对mod_rewrite一无所知,所以我不能指望他们提供任何帮助。

      根据我的FTP日志,我已经做了大约80次尝试,我真的可以在这里使用。

2 个答案:

答案 0 :(得分: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来调用为dot。对不起,我是移动设备,所以我无法解释更多,但随时可以询问您想要了解的代码。

答案 1 :(得分: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]

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