问题描述
我正在尝试制定重写规则,以便如果访问者键入: https://mywebsite.com/app/invite/abc123 它被解析为: https://mywebsite/invite.PHP?id=abc123
使用以下代码:
RewriteRule ^app/invite/(.+)$ /app/invite.PHP?id=$1
问题是重写后所有的相关链接都断开了,因为invite不是一个真正存在的目录,它被添加到所有的相关链接中。
我想指出的是,我在 .htaccess 文件中使用了以下规则。
RewriteEngine On
# Redirect http to https
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Redirect www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# Remove PHP file extension from links
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.PHP -f
RewriteRule ^(.*)$ $1.PHP
我正在尝试调整所有不会导致无限重定向或间隔服务器错误的内容。
我使用 Apache/2.4.46。
解决方法
我终于通过使用此代码设法解决了这个问题:
// this is on a button,and how I send the edited info from *form2* to the database
byte[] imageData;
using (SqlConnection sqlCon = new SqlConnection(connectionString))
using (SqlCommand sqlCmd = new SqlCommand())
using (MemoryStream mStream = new MemoryStream()) {
sqlCon.Open();
sqlCmd.Connection = sqlCon;
sqlCmd.Parameters.AddWithValue("@Parameter1",txt1.Text.ToString());
sqlCmd.Parameters.AddWithValue("@Parameter2",txt2.Text.ToString());
sqlCmd.Parameters.AddWithValue("@Parameter2",txt2.Text.ToString());
imageData = mStream.ToArray();
sqlCmd.Parameters.AddWithValue("@Parameter3",SqlDbType.VarBinary).Value = imageData;
pb1.Image.Save(mStream,ImageFormat.Jpeg);
SqlCmd.ExecuteNonQuery();
在invite.php 中,我将RewriteRule "^app/invite/([0-9a-zA-Z]+)" "/app/invite?id=$1" [NC,L,QSA]
标签中的基础设置为:
<head>
所以它会跳回实际目录并且不会破坏网站链接。 如果有人有更好的方法,如果他们与我分享,我会很高兴。 干杯!