来自域基础的mod_rewrite

时间:2011-10-14 08:50:44

标签: php apache mod-rewrite redirect

我不确定这是否可行,但我想像这样使用mod_rewrite:

http://abc.com/something => http://abc.com/script.php?q=something

这不起作用:

Options +FollowSymLinks
RewriteEngine on
RewriteRule /(.*)$ /script.php?q=$1

有可能吗?

修改 我应该提到mod_rewrite在我使用它时工作正常:

Options +FollowSymLinks
RewriteEngine on
RewriteRule script/(.*)$ /script.php?q=$1

再次编辑: http://emailsms.me/redirect.php?id=abc

使用此:

RewriteEngine on
RewriteRule ^([A-z]{1,})$ /redirect.php?q=$1

理论上http://emailsms.me/abc应该输出abc(它所做的只是回显当前的输入)。但我得到404错误。

更新:好像Options + FollowSymLinks在这里引起了问题。如果我发表评论,我会收到404错误,但是当它出现在那里并且我放了任何东西(我的意思是甚至是#)时,我的日志中出现了这个错误:

[Fri Oct 14 02:20:26 2011] [alert] [client 1.2.3.4] /home/me/redirects/.htaccess: Illegal option #

3 个答案:

答案 0 :(得分:1)

听起来你是从.htaccess那里做的,而不是vhost配置。在这种情况下,您必须丢失RewriteRule中的第一个/。

答案 1 :(得分:1)

试试这个:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /script.php?q=$1 [L,QSA]

您可能不希望在重写规则中使用尾随斜杠,并且您需要检查所请求的文件是否不存在(2个RewriteCond行),否则您将收到500 Server错误,因为重写循环(/ script.php将始终匹配^(。*)$并再次重写)。请注意,如果您没有/script.php文件,则会出现500错误,因为重写将循环。

答案 2 :(得分:0)

您可以尝试以下方式:

RewriteEngine on
RewriteRule ^([A-z]{1,})$ /script.php?q=$1

你可以看到(。*)崩溃